Django Book에 따라 책/저자/발행자가 포함 된 기본 Django 응용 프로그램을 만들었습니다. 기존 책을 수정하기위한 방법을 만들기 위해 ModelForm을 사용하려고 시도했지만 문제는 'authors'필드는 ManyToManyField이고 ModelForm에서 선택 사항을 선택하면 기존 선택 항목이 지워지고 새 항목을 저장하지 않습니다.ModelForm 및 ModelMultipleChoiceField를 사용하여 ManyToManyField에 저장
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})
건배!
편집 나는 단지에 다음과 같은 권장 몇 가지 기사를 발견했다
authors = form.save(commit=False)
authors.user = request.user
authors.save()
form.save_m2m()
views.py하지만 여전히 운을 가지고 있지 것은 -이 어려울 수 없습니다!
정확히 어떻게 수동으로 처리하나요? 미묘한 질문에 사과하지만 이것으로 잠시 고생했습니다! – jonseager
@jonseager 왜 이것을 필요로합니까? 이'authors = ...'줄을 제거하면 모든 것이 제대로 작동합니다. – DrTyrsa
나는 그것을 잠시 후에 제거했다 - 아직도 저장하지 않고있다. 나는 쉘에 cleaned_data를 출력 할 수 있고 작성자를 보여주기 때문에 형식을 올바르게 읽었지만 실제로는 저장하지 않습니다. 당신의 도움을 주셔서 감사합니다! – jonseager