django-forms - Django 1.3 CreateView、ModelForm 和通过 request.user 过滤字段

标签 django-forms django-views django-class-based-views django-1.3

我正在尝试过滤 ModelForm 上的字段。我正在为我的 View 子类化通用 CreateView。我在网上找到了很多关于我的问题的引用,但这些解决方案似乎不适用于 Django 1.3 的基于类的 View (至少对我而言)。

这是我的模型:

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

最佳答案

我看到你一直在不同的地方发布这个问题......我发现的方式是因为我试图弄清楚同样的事情。我想我刚刚开始工作,这就是我所做的。我从 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

关于django-forms - Django 1.3 CreateView、ModelForm 和通过 request.user 过滤字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6890635/

相关文章:

python - Django 简单形式 "object has no attribute ' is_hidden'"

django - 基于django类的 View 中模板的命名规则是什么

django - 删除相关数据后,在 DeleteView 上使用 get_success_url

Django 错误 : __init__() got multiple values for keyword argument 'max_length'

django - 如何在没有表单选择和提交按钮的情况下使用 Django i18n/setlang?

python - 电子邮件验证(1062, "Duplicate entry ''对于 key 'email'“)

Django - 我如何从 View 中请求 cURL

python - 为什么这个正则表达式代码不起作用

python - 在 Get/Filter 中检查 Django ORM 中是否存在对象的更好方法?

python - “initial”是此函数的无效关键字参数