首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何摆脱Django形式的RadioSelect生成的虚假选择

问如何摆脱Django形式的RadioSelect生成的虚假选择
EN

Stack Overflow用户
提问于 2011-04-28 19:39:57
回答 5查看 4K关注 0票数 11

我在Django 1.3上使用ModelForm。

models.py:

代码语言:javascript
复制
class UserProfile(models.Model):
...
gender = models.CharField(max_length=1, blank=True, choices=(('M', 'Male'), ('F', 'Female'), ('Unspecified', '')), default='M')
...

forms.py:

代码语言:javascript
复制
class UserProfileForm(ModelForm):
    class Meta:
        model = UserProfile
        fields = ('gender')
        widgets = {
            'gender': forms.RadioSelect(),
        }

当这个小部件被呈现到HTML中时,我得到

代码语言:javascript
复制
<ul> 
<li><label for="id_gender_0"><input type="radio" id="id_gender_0" value="" name="gender" />---------</label></li> 
<li><label for="id_gender_1"><input checked="checked" type="radio" id="id_gender_1" value="M" name="gender" /> Male</label></li> 
<li><label for="id_gender_2"><input type="radio" id="id_gender_2" value="F" name="gender" />Female</label></li> 
<li><label for="id_gender_3"><input type="radio" id="id_gender_3" value="" name="gender" /> Unspecified</label></li> 
</ul> 

问题:我怎样才能摆脱虚假的选择?

几个月前,另一个堆栈溢出用户(这里)也提出了同样的问题。我在那里尝试过接受的解决方案(如你所见),但这对我没有用。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-08-26 13:14:12

即使没有blank=True,它也会显示额外的输入。我创建了一个新的Widget:

代码语言:javascript
复制
from itertools import chain
from django.forms import RadioSelect
from django.utils.encoding import force_unicode

class RadioSelectNotNull(RadioSelect):
    def get_renderer(self, name, value, attrs=None, choices=()):
        """Returns an instance of the renderer."""
        if value is None: value = ''
        str_value = force_unicode(value) # Normalize to string.
        final_attrs = self.build_attrs(attrs)
        choices = list(chain(self.choices, choices))
        if choices[0][0] == '':
            choices.pop(0)
        return self.renderer(name, str_value, final_attrs, choices)
票数 9
EN

Stack Overflow用户

发布于 2012-10-07 19:58:49

设置blank=False (或只删除它)并添加default='Unspecified'

票数 6
EN

Stack Overflow用户

发布于 2011-04-28 19:53:40

您可以在设置小部件时设置选项。它展示了--因为在你的模型中有blank=True。

只需使用小部件的选项arg并将其设置为您在模型中设置的选项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5824037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档