ざっくりこんな感じで用意している場合
#model.py
class Category(models.Model):
text = models.CharField()
#form.py
class CategoryCreateForm(ModelForm):
category = ChoiceField(queryset=Category.objects.none(), empty_label='---', error_messages={'invalid_choice':'error'})
class Meta:
model = Category
fields = ['text']
よく解決策として出てくるのが、CreateFormに__init__を用意して引数で渡しているのを見かけるのですが、正しく値が渡らず上手くいきませんでした。 Djangoのバージョン問題?
NGパターン
def __init__(self, category, *args, **kwargs):
super(QuestionCreateForm, self).__init__(*args, **kwargs)
単純にview.pyでinitialに設定すればOKでした。
view.py
form = CategoryCreateForm()
#本当は必要なselectのoptionが設定されるようにfilterするのがよい
form.fields['category'].queryset = Category.objects.all()
#選択したいvalueを設定すればよい
form.fields['category'].initial = Category.objects.get(id=1).id
0 件のコメント:
コメントを投稿