Django ModelForm как отобразить только подмножество модели
У меня есть модель django для записи к врачу
class Appointment(models.Model):
patient=models.ForeignKey(Patient,on_delete=models.SET_NULL,null=True)
date=models.DateField(default=datetime.date.today)
doctor=models.ForeignKey(Profile,on_delete=CASCADE)
status=models.CharField(max_length=12,default="open")
def __str__(self):
return self.name
Doctor является одной из ролей в модели Profile. Моя форма определена следующим образом
class AppointmentForm(forms.ModelForm):
class Meta:
model=Appointment
exclude = ['id']
def __init__(self,*args,**kwargs):
super().__init__(*args, **kwargs)
self.helper=FormHelper()
self.helper.layout=Layout(
Row(
Column('patient',css_class="form-control, col-md-4 mb-0"),
Column('date',css_class="form-group, col-md-4 mb-0"),
Column('doctor',css_class="form-group, col-md-4 mb-0"),
css_class='row '
),
Submit('btn_save', 'Save',css_class='btn-success')
)
При отображении формы с помощью хрустящих форм отображаются все пользователи модели Профиль.
Как отобразить только Профили с ролью Доктор?
В вашей функции init вы можете отфильтровать набор запросов, используемый для отображения вариантов выбора врача:
class AppointmentForm(forms.ModelForm):
def __init__(self,*args,**kwargs):
super().__init__(*args, **kwargs)
self.fields['doctor'].queryset = Profile.objects.filter(role="Doctor")
Вы можете прочитать об этом далее в Как фильтровать варианты ForeignKey в Django ModelForm?