Pass parameter to form field | 在form field初始化时如何传参给它

1282阅读 0评论2012-06-27 wdove
分类:系统运维

普通的form field初始化过程:

class UserNotificationForm(forms.Form):
      by_stream_bundle = forms.ModelMultipleChoiceField(queryset=BundleStream.objects.all())

但此时queryset将不能接受参数,而且就算使用了__init__(),因为member和__init__调用先后的关系,也不能改变by_stream_bundle field的参数。

Solution: ()
class UserNotificationForm(forms.Form):
    def __init__(self, user, *args, **kwargs):
        super(UserNotificationForm, self).__init__(*args, **kwargs)
        self.user = user
        self.fields['by_stream_bundle'] = forms.ModelMultipleChoiceField(queryset=BundleStream.objects.accessible_by_principal(self.user))

OR

class UserNotificationForm(forms.Form):
    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user')
        super(UserNotificationForm, self).__init__(*args, **kwargs)
        self.fields['by_stream_bundle'] = forms.ModelMultipleChoiceField(queryset=BundleStream.objects.accessible_by_principal(self.user))

上一篇:forms提示AttributeError: Form object has no attribute '_errors'
下一篇:*args和**kwargs的意义