Django通过对管理员菜单的信号对ManyToMany字段所做的更改未保存

时间:2018-10-30 14:34:24

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

我有以下型号:

class Case(models.Model):
title = models.CharField(verbose_name="Titre", max_length=1000)
statement = models.CharField(verbose_name="Énoncé du problême", max_length=1000)

class GivenCase(models.Model):
given_case = models.ForeignKey(Case, on_delete=models.CASCADE)
title = models.CharField(verbose_name="Titre", max_length=1000, null=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)

class Candidate(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
cases = models.ManyToManyField(GivenCase, verbose_name="Cas", related_name="cases", blank=True)
assigned_cases = models.ManyToManyField(Case, verbose_name="Cas assignés", related_name="assigned_cases")

简而言之,我有一个可以有多个Case的候选对象,每当一个Case分配给一个候选对象时,就会处理信号,并创建一个GivenCase并将其分配给该候选对象。

这是我的信号处理程序:

    @receiver(models.signals.post_save, sender=Candidate)
def generate_exercise_for_new_user(sender, instance, **kwargs):
    cases = Case.objects.all()
    assigned_cases = GivenCase.objects.filter(user=instance.user).values_list("title", flat=True)
    for case in cases:
            if case.title not in assigned_cases:
                new_case = GivenCase(title=case.title, given_case=case, user=instance.user)
                new_case.save()
                instance.cases.add(new_case)
                if new_case in instance.cases.all():
                    print("ITS HERE")

我的问题是,当我在管理员视图中更改候选者时,信号代码正在触发(已检查打印),并且new_case保存在我的M2M字段中(如果信号末尾返回true,则最后一个返回true),尽管在保存更改后返回到我的候选人的所有操作,尽管已创建,但没有将GivenCase保存在其中(它们在可用的Case中可见,但是由于我之前添加了它们,所以我希望它们会自动位于所选的Case中。 / p>

它似乎没有失败,看起来在信号处理程序结束后所有更改都消失了,有人知道吗?

0 个答案:

没有答案