Как я могу изменить поле радиокнопки в 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>

Выход:

Person

Как вы можете видеть, поля отображаются вертикально, тогда как я хочу, чтобы они были горизонтальными. Кроме того, мне не нужен первоначальный выбор '__________'. Как я могу этого добиться?

Для замены пунктирных линий вы можете использовать атрибут пустой метки в поле выбора модели, например :

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'})
Вернуться на верх