2

私はシンプルな形をしていますが、

class Compose(forms.Form):
    CHOICES = ()    
    recepient = forms.ChoiceField(choices=CHOICES)
    subject = forms.CharField(max_length=100)
    message = forms.CharField(widget=forms.Textarea)

Chocies は次のように生成されます。

def mychoiceview(request):
        subscribed_lists, other_lists = getListOfLists(request.user.email)
        for lst in subscribed_lists:
            # list name and list address
            CHOICES = CHOICES + ((lst[1],lst[0]),)

        #Bind data to form and render

基本的に、ユーザーは (リストのスーパーセットから) 特定のリストに登録されており、メッセージを送信するリストを (ドロップダウン経由で) 選択できます。

問題は、「CHOICES」を django フォームにバインドする方法が見つからないことです。

オンラインの一部のソリューションには、モデルの使用が含まれます..しかし、クエリセットはありません...選択フィールドにレンダリングさせたい動的に生成されたIDのタプルです。

何か案は ?

ありがとう !

4

2 に答える 2

0

クラスベースのビューを使用している場合:

in view フォームでリクエストを送信するための make mixin

class RequestToFormMixin(object):
    def get_form_kwargs(self):
        kwargs = super(RequestToFormMixin, self).get_form_kwargs()
        kwargs.update({'request': self.request})
        return kwargs

class YouView(RequestToFormMixin, CreateView):
    model = YouModel
    # etc

ビューからリクエストを受信するためのフォームmake mixin

class RequestMixinForm(forms.Form):
    def __init__(self, *args, **kwargs):
        request = kwargs.pop('request')
        super(RequestMixinForm, self).__init__(*args, **kwargs)
        self._request = request

class Compose(RequestMixinForm):
    subject = forms.CharField(max_length=100)
    message = forms.CharField(widget=forms.Textarea)

    def __init__(self, *args, **kwargs):
        super(Compose, self).__init__(*args, **kwargs)
        subscribed_lists, other_lists = getListOfLists(self._request.user.email)
        for lst in subscribed_lists:
            # list name and list address
            CHOICES = CHOICES + ((lst[1],lst[0]),)    
        self.fields['recipient'] = forms.ChoiceField(choices=CHOICES)
于 2013-07-20T11:06:30.963 に答える