删除空白" ---------"来自RadioSelect

时间:2017-02-22 11:39:17

标签: python django

我找不到从Choices_list移除第一行的方法,该第一行显示为-------

我已经尝试了一些事情:blank=TrueBlank=False,......这条线仍在那里。

这就是我在Django网站上的内容:

enter image description here

我的models.pyforms.py文件如下:

# models.py
# coding: utf-8

from django.db import models
from django.utils.encoding import force_text

FAVORITE_THEME = (
    ('Datasystems', 'Datasystems'),
    ('Cameroun', 'Cameroun'),
)

class Theme(models.Model):
    favorite_theme = models.CharField(max_length = 20, choices=FAVORITE_THEME, verbose_name="Sélectionner le thème")



# forms.py
#-*- coding: utf-8 -*-

from django import forms
from django.forms import ModelForm
from .models import Theme

class ThemeForm(forms.ModelForm):
    class Meta:
        model = Theme
        widgets = {'favorite_theme' : forms.RadioSelect,}
        fields=('favorite_theme',)

您是否有删除或隐藏此行的想法?

谢谢

5 个答案:

答案 0 :(得分:5)

来自Django ModelForm docs

  

如果模型字段设置了选项,则表单字段的小部件将设置为选择,其中的选项来自模型字段的选择即可。选项通常包括默认选择的空白选项。如果该字段是必需的,则强制用户进行选择。如果模型字段具有空白=错误并且显式默认值,则将不包括空白选项(最初将选择默认值)。

因此,要在表单中排除空白选项,必须同时提供blank=Falsedefault。仅设置blank=False将不起作用。

答案 1 :(得分:0)

如下所示。

import copy
from django import forms
from .models import Theme

class InhSelect(forms.widgets.Select):
    def __deepcopy__(self, memo):
        self.choices = self.choices[1:]
        obj = copy.copy(self)
        obj.attrs = self.attrs.copy()
        obj.choices = copy.copy(self.choices)
        memo[id(self)] = obj
        return obj

class MyRadioSelect(forms.widgets.RendererMixin, InhSelect):
    renderer = forms.widgets.RadioFieldRenderer
    _empty_value = ''

class ThemeForm(forms.ModelForm):

    class Meta:
        model = Theme
        widgets = {'favorite_theme' : MyRadioSelect(),}
        fields=('favorite_theme',)

答案 2 :(得分:0)

这是一个老问题,但如果其他用户通过Google找到此问题,则需要在您的字段中添加,blank=False,default='Unspecified'

像这样: favorite_theme = models.CharField(max_length = 20, choices=FAVORITE_THEME, verbose_name="Sélectionner le thème",blank=False,default='Unspecified')

答案 3 :(得分:0)

这可能有些麻烦,但是如果其他人在此问题上陷入困境。

您可以将两个选项之一设置为默认值。 像这样

class Theme(models.Model):
    favorite_theme = models.CharField(max_length = 20, choices=FAVORITE_THEME, default="Datasystems",verbose_name="Sélectionner le thème")

这必须工作。

答案 4 :(得分:0)

有一种更简单的方法。您可以像这样操纵选择:

类Cotizacion_Review(forms.ModelForm):

def __init__(self, *args, **kwargs):
    super(Cotizacion_Review, self).__init__(*args, **kwargs)
    self.fields['nota'].widget.choices[0] = ('','-')

在这种情况下,我只想将默认的“ --------”更改为“-”。但是您可以编辑整个选择列表。