Tuhaf bir sorunum var. POST isteğiyle gönderilen bir formu doğrulamaya çalışıyorum ve bu form aslında dört modelin temeli üzerine kurulu.Yuvalanmış formları Django'ya kaydetme
fikri tüm formları doğrulamak ve daha sonra son kaydedilen modeli örnekleri temelinde yabancı tuşları atama, uygun sırayla, onları uygun şekilde kurtarmak. Ben düzgün form.is_valid()
çağrı yoluyla doğrulanmıştır modelin dış anahtarına bir değer atamak çalıştığınızda
sorun
oluşur. Ancak bu özel yabancı anahtar " NULL olmayabilir" diyerekIntegrityError
atar.
Aşağıda
Ben ne yapıyorum üzerinde size fikir verecektir kodu bulabilirsiniz:
Modelleri & formları defitinions: görünümleri birinde
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()
sırasında buna benzer bir hata alıyorum:
IntegrityError at /api/my_method
myapp_author.book_id may not be NULL
book.id
'un bir tam sayı (int
, kontrol ettim) anahtarının yakın zamanda kaydedilmiş olan Book
kayıtlarının kimliği olduğundan eminim.
& kaydedilmemiş formda doğrulanmış yabancı anahtarı nasıl ayarlayabilirim, böylece veritabanına güvenli bir şekilde kaydedebilirim?
sayesinde. – Tadeck