2012-02-29 58 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

相關問題