m2m返回无

时间:2019-07-01 23:54:39

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

当用户更改对象的URL时,应删除该对象并创建一个新的对象:

    ### other fields here ###

    issue = models.ManyToManyField(Issue, null=False, blank=False,)

    def __init__(self, *args, **kwargs):
        super(MyModel, self).__init__(*args, **kwargs)
        self.__original_url = self.url

    def save(self, *args, **kwargs):
        if self.url != self.__original_url:
            my_new_object = MyModel.objects.create(####)
            my_new_object.save()
            my_new_object.issue.add(self.issue) 

问题在于self.issue正在重新调整None。 我也尝试过

my_new_object.issue.add(MyModel.objects.get(pk = self.id).issue)

同一件事。 这怎么了?

2 个答案:

答案 0 :(得分:0)

使用以下内容:

obj = my_new_object.save(commit=False)
obj.issue.add(self.issue) 
obj.save()

答案 1 :(得分:0)

问题在这里:

my_new_object.issue.add(self.issue)

您基本上尝试在其中添加QuerySet而不是实例。

尝试:

issues = self.issue.all()
for issue in issues:
    self.issue.add(issue)

或更简洁:

my_new_object.issue.add(*self.issue.all())