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

+0

@Alasdair 'event_form = models.PositiveSmallIntegerField(max_length = 2、choices = EVENT_FORM_CHOICES)' – tunarob

+0

下記の私の答えを見てください。さて、私は 'max_length = 2'が' IntegerField'に対して意味をなさないとは思っていません。 – Alasdair

答えて

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

頭文字:なし - 正しく挿入されていますか?私は "name 'initial'が定義されていないというエラーが発生します。 – tunarob

+0

いいえ、それは私にエラーを与えます:__init __()は、予期せぬキーワード引数 'initial' – tunarob

0

私は同様の問題に遭遇しましたが、この方法で修正しました。まず、https://pypi.python.org/pypi/django-multiselectfieldをダウンロードしてインストールします。インストール方法がわからない場合は、django-multiselectfield can't installをご覧ください。その後、models.pyで:admin.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) 

:forms.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) 

(あなたが好きなこの名前を付けることができます):

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

関連する問題