Как я могу изменить поле радиокнопки в Django в соответствии с моими предпочтениями?
models.py:
class Person(models.Model):
GENDER_SELECT = (
('f', 'Female'),
('m', 'Male'),
('o', 'Other'),
)
TITLE_SELECT = (
('0', 'Mr.'),
('1', 'Mrs.'),
('2', 'Ms.'),
('3', 'Mast.'),
)
title=models.CharField(max_length=5,choices=TITLE_SELECT)
name=models.CharField(max_length=100)
gender=models.CharField(max_length=11,choices=GENDER_SELECT)
forms.py:
class PersonForm(ModelForm):
class Meta:
model=Person
fields='__all__'
widgets={
'title': forms.RadioSelect(),
'gender': forms.RadioSelect(),
}
template:
<form action="" method="post">
{% csrf_token %}
{{form1.as_p}}
<input type="submit" value="Submit">
</form>
Выход:
Как вы можете видеть, поля отображаются вертикально, тогда как я хочу, чтобы они были горизонтальными. Кроме того, мне не нужен первоначальный выбор '__________'. Как я могу этого добиться?
Для замены пунктирных линий вы можете использовать атрибут пустой метки в поле выбора модели, например :
forms.ChoiceField(empty_label="(Select here)")
Или установите значение None или пустую строку, если вам ничего не нужно
Что касается горизонтального рендеринга, вы можете предоставить свой собственный рендерер, так что что-то вроде этого будет работать :
from django.utils.safestring import mark_safe
class HorizontalRadioRenderer(forms.RadioSelect.renderer):
def render(self):
return mark_safe(u'\n'.join([u'%s\n' % w for w in self]))
forms.ChoiceField(choices=APPROVAL_CHOICES, empty_label="(Select here)",widget=forms.RadioSelect(renderer=HorizontalRadioRenderer))
или если вы используете bootstrap :
forms.ChoiceField(choices=APPROVAL_CHOICES, empty_label="(Select here)", attrs={'class': 'form-check-inline'})