Django: Как изменить дизайн внешнего ключа при использовании forms.py?
Вот моя модель пациента и формы:
class Patient(models.Model):
def __str__(self):
return f"{self.first_name} {self.last_name}"
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()
class PatientForm(forms.ModelForm):
BIRTH_YEAR_CHOICES = []
for years in range(1900,2021):
BIRTH_YEAR_CHOICES.append(str(years))
sex_choice = [('1', 'Homme'), ('2', 'Femme')]
sex = forms.ChoiceField(widget=forms.Select(attrs={'class':'form-control'}), choices=sex_choice)
doctor = forms.ModelChoiceField(widget=forms.Select(attrs={'class': 'form-control'}),queryset=Patient.objects.all())
first_name = forms.CharField(widget= forms.TextInput(attrs={'class':'form-control'}))
last_name = forms.CharField(widget= forms.TextInput(attrs={'class':'form-control'}))
phone = forms.CharField(widget= forms.TextInput(attrs={'class':'form-control'}))
birth_date = forms.DateField(widget=forms.SelectDateWidget(years=BIRTH_YEAR_CHOICES,attrs={'class': 'form-control'}))
class Meta:
model = Patient
fields = '__all__'
def __init__(self, *args, **kwargs):
super(PatientForm, self).__init__(*args, **kwargs)
self.fields['birth_date'].input_formats = ('%Y-%m-%d')
А это register.html:
<form method="POST">{% csrf_token %}
<div class="input-group">
<span class="input-group-text">Prénom:</span>
{{form.first_name}}
</div>
<div class="input-group">
<span class="input-group-text">Nom:</span>
{{form.last_name}}
</div>
<div class="input-group">
<span class="input-group-text">Sex</span>
{{form.sex}}
</div>
<div class="input-group">
<span class="input-group-text">Telephone</span>
{{form.phone}}
</div>
<div class="input-group">
<span class="input-group-text">Date de naissance</span>
{{form.birth_date}}
</div>
<div class="input-group">
<span class="input-group-text">Docteur</span>
<select name="doctor_choice">
{% for doctor in doctors %}
<option value="{{doctor.pk}}">{{doctor.first_name}} {{doctor.last_name}}</option>
{% endfor %}
</select>
</div>
Аттрс={'class':'form-control'} работает для всех полей, кроме поля doctor, которое является ForeignKey в модели Patient. Поэтому, когда я искал об этом, я нашел, что они используют doctor = forms.ModelChoiceField, но это все равно не работает, и 'class':'form-control' пока не работает