我已经创建了一个基本的Django应用程序,该应用程序包含根据Django书籍的书籍/作者/发布者 - 尝试使用ModelForm创建修改现有书籍的方法 - 问题在于'作者'字段是一个ManyToManyField,当我在ModelForm上选择一个选项时,它只是擦除现有的选择并且不保存新的选择?使用ModelForm和ModelMultipleChoiceField保存到ManyToManyFields
models.py
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField2(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
def __unicode__(self):
return self.title
class BookForm(ModelForm):
class Meta:
model = Book
authors = forms.ModelMultipleChoiceField(queryset=Author.objects.all(), required=False)
views.py
def editBook(request, b=None):
instance = None
if b is not None:
instance = Book.objects.get(title=b)
if request.method == 'POST':
form = BookForm(request.POST, instance=instance)
if form.is_valid():
form.save()
return HttpResponseRedirect('/contact/thanks/')
else:
form = BookForm(instance=instance)
return render_to_response('book_form.html', {'form':form})
干杯!
编辑 我刚刚发现了几个文章,鼓励在以下views.py
authors = form.save(commit=False)
authors.user = request.user
authors.save()
form.save_m2m()
但仍然没有任何运气 - 不能这么难!
究竟如何手动处理呢?对于nub问题的歉意,但一直在努力争取一段时间! – jonseager
@jonseager你为什么需要这个?只要删除这个'authors = ...'行,一切都会按你的意愿工作。 – DrTyrsa
我把它删除了一段时间 - 它仍然没有保存。表单被正确读取,因为我可以输出的清洁数据到shell,它显示作者 - 但仍然不实际保存?谢谢你的帮助! – jonseager