无法在覆盖的保存方法中设置多对多关系

时间:2019-06-08 16:24:51

标签: python django django-models many-to-many

我正在尝试创建一个系统来设置问题,它会自动创建用户定义的自定义字段,该字段将存储在另一个模型中。我将当前模型设置为与自定义字段模型具有多对多关系,并覆盖save方法,以便为每个自定义字段添加默认值。

当我保存问题模型后使用.add方法时,似乎什么也没发生,因此没有创建多对多关系。可以在Django Admin界面中建立关系。

类Issue(models.Model):

class Meta:
    verbose_name = "Issues"
    verbose_name_plural = "Issues"

title = models.TextField(null=False, blank=False)
description = models.TextField()
owner = models.ForeignKey(Organisation, on_delete=models.CASCADE)
category = models.ForeignKey(IssueCategory, on_delete=models.CASCADE)
state = models.ForeignKey(IssueStates, on_delete=models.CASCADE)
project = models.ForeignKey(Project, on_delete=models.CASCADE)
assignedTo = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
customFields = models.ManyToManyField(IssueCustomFields, blank=True)

def save(self, *args, **kwargs):

    super(Issue, self).save(*args, **kwargs)

    for x in IssueCustomFieldDefinitions.objects.filter(owner=self.owner):

        issueCustom = IssueCustomFields.objects.create(
            value=x.default,
            fieldDefinition = x,
            owner = self.owner,
        )

        self.customFields.add(issueCustom)
        print(self.customFields.all())

我希望保存问题模型后,它会遍历用户已设置的所有自定义字段,并创建它的实例以及建立关系。从未建立关系(尽管创建了实例)

1 个答案:

答案 0 :(得分:0)

多对多关系不依赖于save方法。如果您将多个模型之间的关系分配给多对多,您不需要保存任何一个模型。