我慢慢地通过Django获得了我的知识,但是这个让我难过。我正在尝试创建一个多个用户需要批准的表单。在这样做的过程中,我创建了一个带有modelform的CreateView,并且工作正常。我还创建了一个UpdateView,这也很好用,但需要注意的是,如果一个用户更新模型表单,他们实际上是为每个人更新它。通过我的研究,我确定用户实际上应该更新表格的实例?但我似乎可以弄清楚如何做到这一点。这是我的代码模型。我试图将那些对这个问题不重要的代码排除在外。
我的模特
class Book(models.Model):
approver = models.ManyToManyField(settings.AUTH_USER_MODEL,related_name='approver')
def __str__(self):
return self.quiz_name
CreateView的
class CreateBookView(LoginRequiredMixin,CreateView):
model = Book
form_class = CreateBook
template_name = 'Book/create_book.html'
def get_form_kwargs(self):
kwargs = super(CreateBookView, self).get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
def form_valid(self, form):
self.object = form.save()
self.object.checker.add()
self.object.save()
return HttpResponseRedirect(self.get_success_url())
def get_success_url(self):
return reverse('Test:book_test')
的ModelForm
class CreateBook(forms.ModelForm):
class Meta:
model = Book
fields = ('approver',)
def __init__(self, user, *args, **kwargs):
super(CreateBook, self).__init__(*args, **kwargs)
self.fields['approver'] = forms.ModelMultipleChoiceField(
widget=forms.CheckboxSelectMultiple(),
queryset= User.objects.all())
的UpdateView
class BookUpdateView(LoginRequiredMixin,UpdateView):
model = Book
template_name = 'Test/book_update.html'
form_class = ReviewNewBookForm
success_url = reverse_lazy('Test:book_menu')
def get_form_kwargs(self):
kwargs = super(BookUpdateView, self).get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
的ModelForm
class ReviewNewBookorm(forms.ModelForm):
class Meta:
model = Book
fields = ['approver',]
def __init__(self, user, *args, **kwargs):
super(ReviewNewBookForm, self).__init__(*args, **kwargs)
self.fields['approver'].widget.attrs['class'] = 'choices3'
self.fields['approver'].initial = " "
上面的代码完美无缺,除了我无法解决如何为每个被选中的审批者保存单独的表单实例。一个用户可以批准表单,表单立即更改为已批准。我尝试做的是选择多个批准者,这些批准者完全适用于CreateView,但是当涉及到UpdateView时,我无法弄明白。任何帮助或想法都表示赞赏。我试图在UpdateView中包含我在CreateView中的form_valid部分,但它似乎并不重要。我怀疑我必须在UpdateView的form_valid中做一些不同的事情但是无法弄明白。我在SO上发现了一个类似的问题,但它是使用基于函数的视图解决的,我正在为这个问题寻找一个稍微等同的基于类的视图,因为我的问题与这个问题不同,但是它是' s close ... Django UpdateView - get initial data from many-to-many field and add them when saving form