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'))
# ...