私は奇妙な問題があります。 POSTリクエストを通じて送信された1つのフォームを検証しようとしていますが、このフォームは実際には4つのモデルの基礎に基づいて構築されています。Djangoで入れ子になったフォームを保存する
考えられるのは、すべてのフォームを検証し、適切に保存されたフォームを、最近保存したモデルインスタンスに基づいて外部キーを割り当てることです。
form.is_valid()
呼び出しによって正しく検証されたモデルの外部キーに値を割り当てるときに問題が発生します。しかし、この特定の外部キー "はNULLでない可能性があります"を示すIntegrityError
がスローされます。
私がやっているものにあなたのアイデアを与える必要があるコードを見つけてください。
モデル&フォームdefitinions:ビューのいずれかで
class Author(models.Model):
name = models.CharField(blank=False, max_length=150)
book = models.OneToOneField('Book') # its important, one author has one book
class Book(models.Model):
name = models.CharField(blank=False, max_length=150)
class AuthorForm(ModelForm):
class Meta:
model = Author
exclude = ('book',)
class BookForm(ModelForm):
class Meta:
model = Book
:
if request.method == "POST":
author_form = AuthorForm(request.POST, prefix='author')
book_form = BookForm(request.POST, prefix='book')
if author_form.is_valid() and book_form.is_valid():
book = book_form.save()
author_form.cleaned_data['book_id'] = book.id
author.form.save() # Error!
をauthor_form.save()
の間に私はこのようなエラーを受け取ります:
IntegrityError at /api/my_method
myapp_author.book_id may not be NULL
book.id
は、最近保存されたIDであるBook
のIDを持つ整数(int
、私はそれをチェックしました)と完全に一致しています。
有効である&の未保存の形式を持つ外部キーをどのように設定することができますか?私は安全にデータベースに保存できますか?
それは、感謝を助けました。 – Tadeck