2012-02-29 48 views
3

如何从渲染选择删除“------”? 我在我的模型形式使用:Django的 - CheckboxSelectMultiple没有“------”选择

widgets = { 
    'event_form': forms.CheckboxSelectMultiple(), 
} 

在模型中我有选择IntegerField:

EVENT_FORM_CHOICES = (
    (1, _(u'aaaa')), 
    (2, _(u'bbbb')), 
    (3, _(cccc')), 
    (4, _(u'dddd')), 
    (5, _(eeee')) 
) 

渲染选择含有---------作为第一个可能的选择。我如何摆脱它?

编辑: 唯一的工作方式,我想通了,是(在INIT法):

tmp_choices = self.fields['event_form'].choices 
del tmp_choices[0] 
self.fields['event_form'].choices = tmp_choices 

,但它不是很优雅的方式:)

+0

什么是你的'event_form'场看起来像你的模型? – Alasdair 2012-02-29 14:48:26

+0

@Alasdair'event_form = models.PositiveSmallIntegerField(MAX_LENGTH = 2,选择= EVENT_FORM_CHOICES)' – tunarob 2012-02-29 19:04:26

+0

见我的回答如下。另外,我不认为'max_length = 2'对于IntegerField是有意义的。 – Alasdair 2012-02-29 20:47:25

回答

1

Django是包括空白的选择,因为现场没有默认值。

如果您设置模型中的默认值,那么Django将不包括空白的选择。

class MyModel(models.Model): 
    event_form = models.PositiveSmallIntegerField(choices=EVENT_FORM_CHOICES, default=1) 

如果你不想设置模型中的默认值,那么你可以显式声明的领域和选择模型的形式,或更改模型形式的__init__方法的选择。

3

更新

一个类似的例子也许有用:

country = ModelChoiceField(reference_class = Country, choices= country_choices, 
required=True, empty_label=None, widget=forms.Select) 

如果你想办法解决客户端改为:

<script>  
$("#selectBox option[value='-----']").remove(); 
</script> 
+0

初始:无 - 是否正确插入?我得到错误“名称”初始“未定义”。 – tunarob 2012-02-29 14:39:29

+0

不,它给了我一个错误:__init __()有一个意外的关键字参数'initial' – tunarob 2012-02-29 19:03:37

0

我遇到类似的问题,但固定的这种方式。首先,下载并安装https://pypi.python.org/pypi/django-multiselectfield。如果你不知道如何安装,请看这里:django-multiselectfield can't install。然后,在models.py:

from multiselectfield import MultiSelectField 

CHOICES_FOR_ITEM_WITH_CHOICES = (
      ("choice 1", "choice 1"), 
      ("choice 2", "choice 2"), 
      ("choice 3", "choice 3"), 
     ) 
class MyModel(models.Model): 
     item_with_choices = MultiSelectField(max_length=MAX_LENGTH, null=True, blank=True) 

在admin.py:

from .forms import MyModelForm 
class MyModelAdmin(admin.ModelAdmin): 
    form = MyModelForm 

    list_display = ('item_with_choices',) 
    list_filter = ('item_with_choices',) 
    search_fields = ('item_with_choices',) 

admin.site.register(MyModel, MyModelAdmin) 

在forms.py(你能说出这个不管你喜欢):

from .models import MyModel 

class MyModelForm(ModelForm): 

    class Meta: 
     model = MyModel 
     fields = (
      'item_with_choices', 
      ) 

    def clean(self): 
     # do something that validates your data 
     return self.cleaned_data 

这建立关答案在这里:Django Model MultipleChoice

相关问题