Ho uno strano problema. Sto provando a convalidare un modulo inviato tramite la richiesta POST, e questo modulo è in realtà costruito sulla base di quattro modelli.Salvataggio di moduli nidificati in Django
L'idea è di convalidare tutti i moduli e quindi salvarli di conseguenza, nell'ordine appropriato, assegnando chiavi esterne sulla base delle istanze del modello salvate di recente.
Il problema si verifica quando si tenta di assegnare un valore alla chiave esterna del modello correttamente convalidato tramite la chiamata form.is_valid()
. Getta comunque un IntegrityError
dicendo che questa chiave estranea specifica "potrebbe non essere NULL".
Qui di seguito potete trovare il codice che dovrebbe dare l'idea su quello che sto facendo:
modelle & forme 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
In una delle viste:
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!
Durante lo author_form.save()
ho ricevuto un errore simile a questo:
IntegrityError at /api/my_method
myapp_author.book_id may not be NULL
Sono assolutamente sicuro che book.id
sia un numero intero (int
, l'ho verificato) con l'ID del record Book
salvato di recente.
Avete idea di come potrei impostare la chiave esterna che ha convalidato il modulo non salvato &, quindi posso salvarlo tranquillamente nel database?
Mi ha aiutato, grazie. – Tadeck