如何仅使用当前用户的作者(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
。
这是我的代码,我已经阅读了文档,似乎这种方法是正确的方法,我没有收到任何错误,但我没有看到任何结果。有人可以帮我解决我做错的事吗?
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
。