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?

Вернуться на верх