0

カスタマイズされたユーザー データを含むフォームを表示したいと考えています。forms.ChoiceFieldより具体的には、ユーザーごとに異なるデータを入力したいと考えています。

これは私のFormです:

class WallPostForm(forms.Form):
    text = forms.CharField(label=u'', widget=TinyMCE(attrs={'cols': 70, 'rows': 5}))
    relates_to = forms.ChoiceField(label=u'Relates to', choices=[], widget=forms.Select(), required=False)

    def __init__(self, data):
        self.fields['relates_to'] = forms.ChoiceField(label=u'Relates to', choices=data, widget=forms.Select(), required=False)
        super(WallPostForm, self).__init__()

そして、これが私がこれを呼んでいる方法です:

user = get_object_or_404(User, username=username)
data = UserTopics.objects.filter(user=user, result=0).values('id', 'topic__name')[:10]
form = WallPostForm(data)

'WallPostForm' object has no attribute 'fields'エラーが発生します。

私は何を間違っていますか?

4

3 に答える 3

4

choicesジャックの答えに加えて、フィールド全体ではなく、属性を置き換えるだけの方がよいでしょう。

def __init__(self, *args, **kwargs):
    relates_to_choices = kwargs.pop('relates_to_choices')
    super(WallPostForm, self).__init__(*args, **kwargs)
    self.fields['relates_to'].choices = relates_to_choices

(変数の名前を変更しました。クエリセットにはなりません。)

于 2013-02-26T10:43:54.270 に答える
2

Django は、フォームのfieldsプロパティを に設定し__init__ます。

だからあなたのコードを交換してください:

def __init__(self, data):
    super(WallPostForm, self).__init__()
    self.fields['relates_to'] = forms.ChoiceField(label=u'Relates to', choices=data, widget=forms.Select(), required=False)

Formただし、おそらく aをそのようにオーバーライドするべきではありません__init__。Django のフォーム システムは、datainit の arg に、choices フィールドに使用しているクエリセットではなく、フォームのデータが含まれていることを想定しています。

別の方法でオーバーライドします:

def __init__(self, *args, **kwargs):
    relates_to_queryset = kwargs.pop('relates_to_queryset')
    super(WallPostForm, self).__init__(*args, **kwargs)
    self.fields['relates_to'] = forms.ChoiceField(label=u'Relates to', choices=relates_to_queryset, widget=forms.Select(), required=False)

次に、それを呼び出します。

form = WallPostForm(request.POST or None, relates_to_queryset=data)
于 2013-02-26T10:15:03.630 に答える
-1

「初期」パラメーターを使用できます。ドキュメントを参照してください: https://docs.djangoproject.com/en/dev/ref/forms/api/#django.forms.Form.initial

于 2013-02-26T10:47:25.870 に答える