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

相關問題