Django: Как я могу фильтровать внешний ключ класса в моделях из users.forms

Я создаю модель пациента в приложении "Пациент"

from django.contrib.auth.models import User

# Create your models here.

class Patient(models.Model):
    doctor = models.ForeignKey(User, on_delete=models.CASCADE)
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    sex = models.CharField(max_length=20)
    phone = models.IntegerField()
    birth_date = models.DateField()

Я хочу фильтровать поля доктора, который является внешним ключом от Users только для groups='Docteur', так что когда я хочу добавить пациента, я могу найти только пользователей с группами 'Docteur', а не группы других аккаунтов.

Это forms.py в приложении users app:

from django import forms
from django.contrib.auth.forms import UserCreationForm
import datetime

class RegisterForm(UserCreationForm):
    BIRTH_YEAR_CHOICES = []
    for years in range(1900,2021):
        BIRTH_YEAR_CHOICES.append(str(years))
    sex_choice = [('1', 'Men'), ('2', 'Women')]
    groups_choice = [('1','Docteur'), ('2','Docteur remplaçant'), ('3','Secrétaire')]
    first_name = forms.CharField(max_length=200)
    last_name = forms.CharField(max_length=200)
    sex = forms.ChoiceField(widget=forms.Select, choices=sex_choice)
    date_of_birth = forms.DateField(widget=forms.SelectDateWidget(years=BIRTH_YEAR_CHOICES))
    email = forms.EmailField()
    phone = forms.IntegerField()
    cin = forms.IntegerField()
    groups = forms.ChoiceField(widget=forms.Select, choices=groups_choice)
    password1 = forms.CharField(widget=forms.PasswordInput(), label='Password')
    password2 = forms.CharField(widget=forms.PasswordInput(), label='Repeat Password')

    class Meta(UserCreationForm.Meta):
        fields = UserCreationForm.Meta.fields + ('username','first_name','last_name','sex','date_of_birth','email','phone','cin','groups')

Итак, что я должен сделать, чтобы добавить это условие.

Если я правильно понимаю, вам нужна форма для создания Patient, в которой можно выбрать User для doctor внешнего ключа, но ограничить выбор пользователями, которые выбрали ('1', 'Docteur') выбор в качестве groups поля.

В этом случае вы можете использовать ModelChoiceField и предоставить отфильтрованное queryset:

from django.contrib.auth.models import User
from django import forms

class AddPatientForm(forms.ModelForm): # or just forms.Form
    doctor = forms.ModelChoiceField(queryset=User.objects.filter(groups='1'))
    # ...
Вернуться на верх