Я понял, как добавить классы в поля формы.У меня есть следующее:
# models.py
class Contact(AddressMixin, PhoneMixin):
contact_id = models.AutoField(primary_key=True)
name = models.CharField(_('name'), max_length=50, blank=False)
company = models.CharField(_('company'), max_length=50, blank=True)
photo = models.CharField(_('photo'), max_length=255, blank=True)
notes = models.TextField(_('notes'), blank=True)
created_on = models.DateField(auto_now_add=True)
# forms.py
class ContactForm(ModelForm):
class Meta:
model = Contact
fields = ['name', 'company', 'photo', 'notes']
widgets = {
'name': forms.TextInput(attrs={'class': 'form-control'}),
'company': forms.TextInput(attrs={'class': 'form-control'}),
'photo': forms.TextInput(attrs={'class': 'form-control'}),
'notes': forms.Textarea(attrs={'class': 'form-control'}),
}
Магия заключается в class Meta
, в частности в поле widgets
.Именно здесь вы можете определить, какой класс идти на какое поле.Однако для каждого контакта я хочу добавить 1 или несколько телефонных номеров, чтобы у меня было следующее:
# models.py
class Phone(models.Model):
entity = models.ForeignKey('PhoneMixin', on_delete=models.CASCADE)
number = models.CharField(_('number'), max_length=50, blank=True)
class PhoneMixin(models.Model):
phone_id = models.AutoField(primary_key=True)
pass
# forms.py
class PhoneForm(ModelForm):
class Meta:
model = Phone
exclude = ['entity']
widgets = {
'number': forms.TextInput(attrs={'class': 'form-control'}),
}
Затем у меня есть набор форм, который, по моему мнению, является корнем проблемы:
PhoneFormSet = inlineformset_factory(
Contact,
Phone,
form=PhoneForm,
exclude=('entity',),
extra=1
)
Я могу ошибаться, но я полагаю, что это набор форм, который добавляет поле для удаления.Это поле для удаления заканчивается как флажок в моей форме.Когда я проверял html для этого поля, он имел имя DELETE
, поэтому я подумал, что это будет так же просто, как добавить класс в поле DELETE
в форме Phone
:
# forms.py
class PhoneForm(ModelForm):
class Meta:
model = Phone
exclude = ['entity']
widgets = {
'number': forms.TextInput(attrs={'class': 'form-control'}),
'DELETE': forms.CheckboxInput(attrs={'class': 'custom-control-input'}),
}
ОднакоКажется, это не так.Я даже попробовал все строчные буквы, delete
, но все равно не повезлоЯ подозреваю, что причина в том, что Django добавляет DELETE
поле после , моя форма оценивается, но это только предположение.Поэтому мой вопрос:
Как добавить класс в поле DELETE
, которое Django динамически добавил в форму Phone
?