我有兩個孩子Django的ORM和pre_init信號
class MyChild1(models.Model):
attr1 = models.CharField(default='default value')
class MyChild2(models.Model):
pass
class MyParent(models.Model):
child1 = models.ForeignKey(Child1)
child2 = models.ForeignKey(Child2)
在我的包中的類,我需要attR1位的價值 - 以確保它存在,我初始化母公司有信號:
def init_my_parent(sender, *args, **kwargs):
child1 = MyChild1()
child2 = MyChild2()
signals.pre_init.connect(init_my_parent,sender=MyParent)
這似乎工作正常,以確保child1和child2總是實例化。然而,即使我手動設置child1和的child2(my_parent.child1 = child1
等),child1_id
和child2_id
不要設置和DB引發錯誤
django.db.utils.IntegrityError: NOT NULL constraint failed: myparent.child1
我不知道是什麼原因造成這種現象?不知何故連接該信號導致了一個問題,但我不知道爲什麼。這裏是一個腳本類似於我使用:
c1 = MyChild1()
c2 = MyChild2()
c1.save()
c2.save()
p = MyParent()
p.child1 = c1
p.child2 = c2
p.save()
# Error thrown
無論在init_my_parent
設定值應高於覆蓋,因此一切都應該工作一樣,如果信號功能是不存在?
「在init_my_parent中設置的值都應該被覆蓋,因此它不應該有效果嗎?」 - 他們爲什麼/如何被覆蓋? – ChidG
在你的信號中,你正在實例化兩個新的子對象,但它們沒有被保存到數據庫,所以它們不會有'id'屬性。 – ChidG
我已經用我用來覆蓋這些值的腳本添加了一些細節到最後。 – nven