我正在尝试过滤 ModelForm 上的字段。我正在为我的视图子类化通用 CreateView。我在网上找到了很多关于我的问题的参考资料,但是对于 Django 1.3 的基于类的视图,这些解决方案似乎不起作用(至少对我而言)。
这是我的模型:
#models.py
class Subscriber(models.Model):
user = models.ForeignKey(User)
subscriber_list = models.ManyToManyField('SubscriberList')
....
class SubscriberList(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=70)
....
这是我的看法:
#views.py
class SubscriberCreateView(AuthCreateView):
model = Subscriber
template_name = "forms/app.html"
form_class = SubscriberForm
success_url = "/app/subscribers/"
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.user = self.request.user
return super(SubscriberCreateView, self).form_valid(form)
这是我添加订阅者的原始表单,没有过滤器:
#forms.py
class SubscriberForm(ModelForm):
class Meta:
model = Subscriber
exclude = ('user', 'facebook_id', 'twitter_id')
这是我修改后的表格,试图过滤,但不起作用:
#forms.py
class SubscriberForm(ModelForm):
class Meta:
model = Subscriber
exclude = ('user', 'facebook_id', 'twitter_id')
def __init__(self, user, **kwargs):
super(SubscriberForm, self).__init__(**kwargs)
self.fields['subscriber_list'].queryset = SubscriberList.objects.filter(user=user)
如果我这样更改此修改后的表格:
def __init__(self, user=None, **kwargs)
它有效 - 它没有给我带来订阅者列表。但是我尝试通过任何方式传递请求用户,我总是得到一个名称“请求”或名称“自我”未定义错误。
那么,如何修改我的代码以通过 request.user 过滤subscriber_list,并且仍然使用 Django 1.3 的 CreateView。