3

我想过滤一个ModelForm上的字段。我为我的视图继承了泛型CreateView。我在网上发现了很多关于我的问题的参考资料,但这些解决方案对于Django 1.3的基于类的视图似乎并不起作用(对我来说至少)。Django 1.3 CreateView,ModelForm和按字段过滤request.user

这里是我的模型:

#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。

回答

14

我看到你已经在各个地方发布了这个问题..我发现的方式是因为我试图找出相同的东西。我认为我刚刚得到它的工作,这就是我所做的。我重写了从FormMixin get_form()来过滤特定的表单字段的查询集:

class MyCreateView(CreateView): 

    def get_form(self, form_class): 
     form = super(MyCreateView,self).get_form(form_class) #instantiate using parent 
     form.fields['my_list'].queryset = MyObject.objects.filter(user=self.request.user) 
     return form 
+0

它是如何的StackOverflow有一个_link我brain_:看到我的确切回答过的问题是非常好的,但看到从近似的答案日期当天我有同样的问题是幽灵般的。 – makapuf

+0

这也帮助了我,...在这里,有一个upvote –

+0

为什么不被选为正确的答案呢? – MiniGunnR

相关问题