我找不到从Choices_list
移除第一行的方法,该第一行显示为-------
。
我已经尝试了一些事情:blank=True
,Blank=False
,......这条线仍在那里。
这就是我在Django网站上的内容:
我的models.py
和forms.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',)
您是否有删除或隐藏此行的想法?
谢谢
答案 0 :(得分:5)
如果模型字段设置了选项,则表单字段的小部件将设置为选择,其中的选项来自模型字段的选择即可。选项通常包括默认选择的空白选项。如果该字段是必需的,则强制用户进行选择。如果模型字段具有空白=错误并且显式默认值,则将不包括空白选项(最初将选择默认值)。
因此,要在表单中排除空白选项,必须同时提供blank=False
和default
。仅设置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] = ('','-')
在这种情况下,我只想将默认的“ --------”更改为“-”。但是您可以编辑整个选择列表。