我有两个看起来像这样的模型:
class ModelOne(models.Model):
foo = models.CharField(max_length=25)
def save(self,*args,**kwargs):
a = ModelTwo.objects.get(pk=arbitrary_pk)
a.somefield.add(self) # I am worried about this line here
super(ModelOne,self).save(*args,**kwargs)
class ModelTwo(models.Model):
somefield = models.ManyToManyField(ModelOne)
我要将self
添加到a.somefield
的行是我担心的行。我怎么能没有错误地做到这一点?目前,我得到了:
ValueError: Cannot add "<ModelOne>": the value for field "modelone" is None
提前致谢
答案 0 :(得分:0)
您无法这样做,因为当您调用.add()时,您还没有保存模型。这意味着可能尚未创建模型(因此它还没有ID)。
基本上你告诉Django用一些尚未存在的东西(NULL)来更新外键,这会出错。您需要确保在设置外键之前已创建模型。
尝试将a.somefield.add(self)移动到super()调用之后。
答案 1 :(得分:0)
在调用实际保存方法之前,您无法将多个保存到may字段,您可以修改代码,
def save(self,*args,**kwargs):
super(ModelOne,self).save(*args,**kwargs) # Here your self has been saved
a = ModelTwo.objects.get(pk=arbitrary_pk)
a.somefield.add(self) # Now your self can be add as ManyToMany as it is already saved in db
我希望这有帮助。
答案 2 :(得分:0)
在调用save方法后,将实例添加到多对多字段中。
class ModelOne(models.Model):
foo = models.CharField(max_length=25)
def save(self,*args,**kwargs):
super(ModelOne,self).save(*args,**kwargs)
a = ModelTwo.objects.get(pk=arbitrary_pk)
a.somefield.add(self) #add self to the object manytomany.
a.save() #save the object.
class ModelTwo(models.Model):
somefield = models.ManyToManyField(ModelOne)
您需要先保存自我对象。多对多关系需要首先将相关对象保存在数据库中,以便定义关系。然后,使用a.somefield.add(self)
定义关系。然后,保存a
对象。否则,该关系将不会在数据库中提交。
答案 3 :(得分:0)
我最终使用post_save来实现这一点。