Как убрать опцию «Нет» в Django ModelForm? - PullRequest
5 голосов
/ 14 сентября 2011

Например, у меня есть модель, подобная этой:

class Item(models.Model):
    TYPE_CHOICES = (
        (1, _('type 1')),
        (2, _('type 2')),
    )
    type = models.PositiveSmallIntegerField(max_length=1, choices=TYPE_CHOICES)

И для формы, которую я имею:

class ItemModelForm(forms.ModelForm):
    class Meta:
        model = Item
        widget = {
            'type': forms.RadioSelect(),
        }

Я хотел бы иметь радио-выбор с2 варианта («тип 1» и «тип 2»).Тем не менее, у меня будет 3 варианта, «---------», «тип 1» и «тип 2».Я думаю, «---------» для «Нет», но в модели необходимо указать поле «тип». Почему опция «Нет» все еще отображается?

Ноесли я вместо этого использую форму:

class ItemForm(forms.Form):
    type = forms.ChoiceField(widget=forms.RadioSelect(), choices=Item.TYPE_CHOICES)

У меня будет только 2 варианта, «тип 1» и «тип 2», что правильно.

Я бы хотел использовать ModelForm поверхСтандартная форма, но не знаю, как удалить «---------».Кто-нибудь может мне помочь?Спасибо.

ОБНОВЛЕНИЕ: Спасибо, ребята, только что нашли ответ на этот вопрос здесь .

Похоже, мне придется переопределить либо поле или метод из ModelForm.

Ответы [ 4 ]

5 голосов
/ 14 сентября 2011

Вы можете установить для empty_label значение None.

type = forms.ChoiceField(widget=forms.RadioSelect(), choices=Item.TYPE_CHOICES, empty_label=None)
1 голос
/ 20 июня 2016

Если у вас есть modelForm, вы должны перезаписать поле в вашей форме с помощью forms.ModelChoiceField() вместо models.ChoiceField(), затем добавить параметры, как показано выше, заменив варианты на набор запросов.

type = forms.ModelChoiceField(widget=forms.RadioSelect(), empty_label=None, queryset=TYPE.objects.all())
0 голосов
/ 07 октября 2012

Существует гораздо более простой способ, ничего не переопределяя: просто добавьте default=1 примерно так:

type = models.PositiveSmallIntegerField(max_length=1, choices=TYPE_CHOICES, default=1)

Нашел в Джанго источник:

           include_blank = (self.blank or
                         not (self.has_default() or 'initial' in kwargs))
0 голосов
/ 14 сентября 2011

Как я вижу, это дубликат как избавиться от фиктивного выбора, созданного радиоселектом django-формы

ответ есть, и дополнительные ссылки, надеюсь, помогут.

EDIT

так что, может быть, если вы попробуете это, (я не делал этого, никаких гарантий :))

widget = {
            'type': forms.RadioSelect(choices=Item.TYPE_CHOICES),
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...