如何仅使用当前用户的作者(fk)修改我的通用CreateView中的作者选择字段?

时间:2017-11-01 20:28:28

标签: python django django-forms django-views django-generic-views

这是我的代码,我已阅读文档,似乎这种方法是正确的方法,我没有错误但我看不到任何结果。有人可以帮我解决我的错误吗?

class BookCreate(LoginRequiredMixin, CreateView):
     model = Book
     fields = ['title', 'isbn', 'year', 'author', 'publisher']


    def form_valid(self, form):
        form.instance.owner = self.request.user
        return super(BookCreate, self).form_valid(form)

    def form_valid(self, form):
        b = Book.objects.all
        form.instance.author = ModelChoiceField(queryset=b.author_set.filter(owner=self.request.user))
        return super(BookCreate, self).form_valid(form)

1 个答案:

答案 0 :(得分:0)

从字段列表中简单地排除author,然后在form_valid方法中设置它就容易得多:

class BookCreate(LoginRequiredMixin, CreateView):
    model = Book
    fields = ['title', 'isbn', 'year', 'publisher']

    def form_valid(self, form):
        form.instance.owner = self.request.user
        return super(BookCreate, self).form_valid(form)

如果您这样做,请务必删除第二个form_valid方法,该方法正在替换上面正确的form_valid方法。

如果必须将author作为包含单个选项的字段包含在内,则代码要复杂得多。您需要一个带有__init__方法的自定义表单,该表单需要user并设置auth字段的查询集。

然后,您需要修改视图以使用自定义表单,并覆盖get_form_kwargs以包含self.request.user