اذهب إلى المحتوى

السؤال

نشر

مرحبا لدي فورم الحصول على موعد 

من ضمن الفورم يوجد مربع اول اختيار اسم المركز والثاني اختيار الدكاترة الموجودين ضمن هذا المركز فقط

احتاج الى اظهار اسماء الدكاترة الموجودين ضمن المركز المختار فقط

هل يجب ان اقوم بالتعديل على القاعدة ضمن Postgresql؟؟؟

 

/////models.py

class Appointment(Info_Patient):
     
      image         = models.ImageField(_("Attach medical documents"),blank=True,null=True)
      note         =models.TextField(_("you can send a Note:"),max_length=250,blank=True,null=True)
      appointment_d=models.DateField(_("Date"), default=datetime.now,max_length=100)
      appointment_time= models.TimeField(_("Time:"), default=datetime.now,max_length=100)

      center =models.ForeignKey('accounts.Center',verbose_name=_("Choose health center"),   on_delete=models.CASCADE, unique=False)

      doctor =models.ForeignKey('accounts.ListDoctorCenter',verbose_name=_("Choose your doctor"),   on_delete=models.CASCADE, unique=False  )


    

 

 

def appointment(request):
    if request.method == "POST":    
        centerdoctor =ListDoctorCenter.objects.filter(Center=request.id)/////هنا حاولت ان اقوم بعمل فلترة لكن لم احصل على أي نتيجة
        appointment = AppointmentForm(request.POST, request.FILES)
        if appointment.is_valid():
            appointment.instance.user = request.user
            appointment.save()
            messages.success(request, ('Your websit was successfully added!'))
        else:
            HttpResponse(request, 'Error saving form')
        return redirect("patient:requestt",{'centerdoctor':centerdoctor,})

    appointment = AppointmentForm()
    add = Appointment.objects.all()
    return render(request, 'appointment.html',{
        'appointment':appointment,
        'add':add,
   })

 

111.png

Recommended Posts

  • 0
نشر
بتاريخ 36 دقائق مضت قال مسعود زاهي:

الأمر يتطلب مهارات متقدمة في برمجة الويب. لأن الفلترة تتم بصفة آنية أي يجب استخدام الجافاسكربت للإتصال بالسرفر وتمرير اسم المركز المختار والسرفر يقوم بإرجاع قائمة الأطباء المنتمين له.

أسهل طريقة للوصول لذلك هو باستخدام المكتبة django-autocomplete-light  على الشكل التالي:

1- تثبيت المكتبة: 

pip install django-autocomplete-light

2- إضافة المكتبة إلى ملف الإعدادات في INSTALLED_APPS:

'dal',
'dal_select2',
'django.contrib.admin', # ضعي المكتبات فوق هذه المكتبة

3- تعريف دوال عرض جديدة تقوم بجلب اسماء المراكز واسماء الدكاترة:

class CenterAutocomplete(autocomplete.Select2QuerySetView):
    def get_queryset(self):
        
        if not self.request.user.is_authenticated:
            return Center.objects.none()

        qs = Center.objects.all()
        
        if self.q: # هنا نقوم بفلترة النتائج الخاصة بالمراكز
            qs = qs.filter(name__istartswith=self.q) # نقوم بالفلترة باستخدام name

        return qs
      
class DoctorAutocomplete(autocomplete.Select2QuerySetView):
    def get_queryset(self):
        
        if not self.request.user.is_authenticated:
            return Center.objects.none()

        qs = Center.objects.all()
        
        center = self.forwarded.get('center', None)
        
        if center:
            qs = qs.filter(center__id=center)   # نقوم بفلترة الدكاترة باستخدام اسم المركز
            
        if self.q:
            qs = qs.filter(name__istartswith=self.q) # 
		
        return qs

4- نقوم بإنشاء روابط لهذه الدوال في ملف urls.py:

urlpatterns = [
    url(
        r'^center-autocomplete/$',
        CenterAutocomplete.as_view(),
        name='center-autocomplete',
    ),
    url(
        r'^doctor-autocomplete/$',
        DoctorAutocomplete.as_view(),
        name='doctor-autocomplete',
    ),
]

5- نقوم بإضافة هذه الروابط إلى النموذج الخاص بنا وتغيير ال widget:

class AppointmentForm(forms.ModelForm):
   class Meta: 
        model = Appointment
        fields = ('appointment_d','appointment_time',
       'note','image','center','doctor')
        widgets = {
            'center': autocomplete.ModelSelect2(url='center-autocomplete'),
            'doctor': autocomplete.ModelSelect2(url='doctor-autocomplete', forward=['center'])
        }

في حالة لم تشتغل معك الشيفرة قومي بإرفاق مشروعك على شكل ملف مضغوط وسوف نقوم بمساعدتك للوصول إلى النتيجة التي ترغبين بها.

بالتوفيق.

شكرا لك 

لكنه ضمن الفورم لايتعرف على autocomplete

    'center': autocomplete.ModelSelect2(url='center-autocomplete'),
NameError: name 'autocomplete' is not defined

حاولت استدعاءها عن طريق  from dal import autocomplete

لم ينجح

 

 

تم حل المشكلة 

شكرا جزيلا

  • 0
نشر
بتاريخ 4 دقائق مضت قال Zeina Almakdisi:

مرحبا لدي فورم الحصول على موعد 

من ضمن الفورم يوجد مربع اول اختيار اسم المركز والثاني اختيار الدكاترة الموجودين ضمن هذا المركز فقط

احتاج الى اظهار اسماء الدكاترة الموجودين ضمن المركز المختار فقط

هل يجب ان اقوم بالتعديل على القاعدة ضمن Postgresql؟؟؟

 

/////models.py

class Appointment(Info_Patient):
     
      image         = models.ImageField(_("Attach medical documents"),blank=True,null=True)
      note         =models.TextField(_("you can send a Note:"),max_length=250,blank=True,null=True)
      appointment_d=models.DateField(_("Date"), default=datetime.now,max_length=100)
      appointment_time= models.TimeField(_("Time:"), default=datetime.now,max_length=100)

      center =models.ForeignKey('accounts.Center',verbose_name=_("Choose health center"),   on_delete=models.CASCADE, unique=False)

      doctor =models.ForeignKey('accounts.ListDoctorCenter',verbose_name=_("Choose your doctor"),   on_delete=models.CASCADE, unique=False  )


    

 

 

def appointment(request):
    if request.method == "POST":    
        centerdoctor =ListDoctorCenter.objects.filter(Center=request.id)/////هنا حاولت ان اقوم بعمل فلترة لكن لم احصل على أي نتيجة
        appointment = AppointmentForm(request.POST, request.FILES)
        if appointment.is_valid():
            appointment.instance.user = request.user
            appointment.save()
            messages.success(request, ('Your websit was successfully added!'))
        else:
            HttpResponse(request, 'Error saving form')
        return redirect("patient:requestt",{'centerdoctor':centerdoctor,})

    appointment = AppointmentForm()
    add = Appointment.objects.all()
    return render(request, 'appointment.html',{
        'appointment':appointment,
        'add':add,
   })

 

111.png

مرحبا زينة،

هل الحقول Center و Doctor ضمن النموذج AppointmentForm أو معمولين مباشرة في القالب؟

تحياتي.

 

  • 0
نشر
بتاريخ 4 دقائق مضت قال مسعود زاهي:

مرحبا زينة،

هل الحقول Center و Doctor ضمن النموذج AppointmentForm أو معمولين مباشرة في القالب؟

تحياتي.

 

قمت بوضعهم ضمن AppointmentForm


class AppointmentForm(forms.ModelForm):
   class Meta: 
        model = Appointment
        fields = ('appointment_d','appointment_time',
       'note','image','center','doctor')

 

هل يفيد بأن اضع تعليمة ربط ضمن ل init.py 

مثلا:

SELECT * from ListDoctorCenter inner join Center on ListDoctorCenter.id=Center.id where name_doctor="a name you want"

 

  • 0
نشر
بتاريخ الآن قال Zeina Almakdisi:

قمت بوضعهم ضمن AppointmentForm


class AppointmentForm(forms.ModelForm):
   class Meta: 
        model = Appointment
        fields = ('appointment_d','appointment_time',
       'note','image','center','doctor')

 

الأمر يتطلب مهارات متقدمة في برمجة الويب. لأن الفلترة تتم بصفة آنية أي يجب استخدام الجافاسكربت للإتصال بالسرفر وتمرير اسم المركز المختار والسرفر يقوم بإرجاع قائمة الأطباء المنتمين له.

أسهل طريقة للوصول لذلك هو باستخدام المكتبة django-autocomplete-light  على الشكل التالي:

1- تثبيت المكتبة: 

pip install django-autocomplete-light

2- إضافة المكتبة إلى ملف الإعدادات في INSTALLED_APPS:

'dal',
'dal_select2',
'django.contrib.admin', # ضعي المكتبات فوق هذه المكتبة

3- تعريف دوال عرض جديدة تقوم بجلب اسماء المراكز واسماء الدكاترة:

class CenterAutocomplete(autocomplete.Select2QuerySetView):
    def get_queryset(self):
        
        if not self.request.user.is_authenticated:
            return Center.objects.none()

        qs = Center.objects.all()
        
        if self.q: # هنا نقوم بفلترة النتائج الخاصة بالمراكز
            qs = qs.filter(name__istartswith=self.q) # نقوم بالفلترة باستخدام name

        return qs
      
class DoctorAutocomplete(autocomplete.Select2QuerySetView):
    def get_queryset(self):
        
        if not self.request.user.is_authenticated:
            return Center.objects.none()

        qs = Center.objects.all()
        
        center = self.forwarded.get('center', None)
        
        if center:
            qs = qs.filter(center__id=center)   # نقوم بفلترة الدكاترة باستخدام اسم المركز
            
        if self.q:
            qs = qs.filter(name__istartswith=self.q) # 
		
        return qs

4- نقوم بإنشاء روابط لهذه الدوال في ملف urls.py:

urlpatterns = [
    url(
        r'^center-autocomplete/$',
        CenterAutocomplete.as_view(),
        name='center-autocomplete',
    ),
    url(
        r'^doctor-autocomplete/$',
        DoctorAutocomplete.as_view(),
        name='doctor-autocomplete',
    ),
]

5- نقوم بإضافة هذه الروابط إلى النموذج الخاص بنا وتغيير ال widget:

class AppointmentForm(forms.ModelForm):
   class Meta: 
        model = Appointment
        fields = ('appointment_d','appointment_time',
       'note','image','center','doctor')
        widgets = {
            'center': autocomplete.ModelSelect2(url='center-autocomplete'),
            'doctor': autocomplete.ModelSelect2(url='doctor-autocomplete', forward=['center'])
        }

في حالة لم تشتغل معك الشيفرة قومي بإرفاق مشروعك على شكل ملف مضغوط وسوف نقوم بمساعدتك للوصول إلى النتيجة التي ترغبين بها.

بالتوفيق.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...