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

How to modify the author choices field in my generic CreateView with authors(fk) only from the current user?

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

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)

从字段列表中简单地排除 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