我想保存一个对象,以便保存M2M。然后我想读出M2M字段进行一些计算并在保存的对象上设置一个字段。
class Item(models.Model):
name = models.CharField(max_length=20, unique=True)
product = models.ManyToManyField(SomeOtherModel, through='SomeTable')
def save(self, *args, **kwargs):
super(Item, self).save(*args, **kwargs)
m2m_items = SomeTable.objects.filter(item = self)
# DO SOME STUFF WITH THE M2M ITEMS
m2m_items不会出现。有没有办法搞定这些?
答案 0 :(得分:4)
这里有些混乱。
拨打super
后,self.id
将有一个值。
但是,我不明白你filter
电话的意思。首先,您可能意味着get
而不是filter
,因为过滤器获取查询集,而不是单个实例。但即便如此,这个电话也毫无意义:你只是只是保存了它,所以无论你从数据库中得到什么都将是完全相同的。有什么意义?
问题更新后修改好的,谢谢您的澄清。但是,模型的save()
方法不负责对M2M项目执行任何操作。它们需要单独保存,这是表单或视图的工作。