当创建XYZ模型对象时,我试图通过XYZ模型的保存方法创建模型ABC的一些对象。请参阅以下代码以供参考:
Class XYZ(models.Model):
name = models.CharField(max_length=150)
#Other Feilds
def save(self, *args, **kwargs):
self.match_tick = self.match_date.timestamp()
contest_obj_1 = ContestDetail(
contest_of_ABC=self,
contest_name="₹1000 Winnnings",
filled_status = False,
)
contest_obj_1.save()
super(MatchDetail, self).save(*args, **kwargs)
Class ABC(models.Model):
contest_of_ABC = models.ForeignKey(XYZ)
contest_name = models.CharField(max_length=100)
filled_status = models.BooleanField(default=False)
这是错误行:
File "./center/models.py", line 47, in save
contest_obj_1.save() File "./center/models.py", line 203, in save
super(ContestDetail, self).save(*args, **kwargs) File "/home/FightBack/.virtualenvs/ENV/lib/python3.5/site-packages/django/db/models/base.py", line 762, in save
"unsaved related object '%s'." % field.name ValueError: save() prohibited to prevent data loss due to unsaved related object 'contest_of_ABC'.
答案 0 :(得分:1)
您将要在创建ContestDetail对象之前(而不是之后)在MatchDetail上调用super.save(),因为您拥有它。在调用super之前,您自己的对象没有主键(假设它是一个新对象被保存)
def save(self, *args, **kwargs):
self.match_tick = self.match_date.timestamp()
super(MatchDetail, self).save(*args, **kwargs)
contest_obj_1 = ContestDetail(
contest_of_ABC=self,
contest_name="₹1000 Winnnings",
filled_status = False,
)
contest_obj_1.save()