调用.save()后Django模型未更新

2024-10-01 09:22:51 发布

您现在位置:Python中文网/ 问答频道 /正文

在My view中调用save()后,我的model不会更新。调查了几个地方(herehere)并没有为我的案例找到任何答案。我的model包含ManyToManyField

型号:

class Event(models.Model):
    name = models.CharField(max_length=120)
    date = models.DateTimeField(auto_now=False, auto_now_add=False)
    attendees = models.ManyToManyField(Employee)
    approval = models.ForeignKey(EventStatus, default=2)

    def __unicode__(self):
        return self.name

    def approve_url(self):
        return reverse("RGAU:EventApprove", kwargs={"id": self.id})

视图:

^{pr2}$

目标是在网页上按下按钮时将Event实例更新为“Approved”(因此视图EventApprove)。在

假定instance.approval.id分配正确的审批状态id,但保存未提交。在

我做错什么了?在


Tags: nameselfeventidfalseautomodelreturn
1条回答
网友
1楼 · 发布于 2024-10-01 09:22:51

你可以用两种不同的方法。如果只有要关联的相关对象的pk(id)值,请使用fieldname_id语法,如下所示:

instance.approval_id = 3
instance.save()

如果您手头有一个关系实例,您可以只指定它:

^{pr2}$

不管怎样,你的实例.批准现在将与id=3的EventStatus关联。在

进一步解释:instance.approvalinstance的属性,它包含{}的关联实例。如果您使用instance.approval.id进一步深入研究,那么您现在正在接触EventStatus实例并更改其id,这是您不想做的。在

instance.approval_id是一个小魔术,Django允许您直接设置将两个模型关联起来的数据库列值。。不需要从数据库中实际获取EventStatus的实例,以便能够将它与事件关联起来。在这种情况下,当您使用已知的引用id值时,它是非常方便的。但即便如此,最好在某处定义它们,例如:

class EventStatus(models.Model):
    APPROVED = 3

    ... etc etc...

然后,您可以使用instance.approval_id = 3,而不是使用instance.approval_id = EventStatus.APPROVED,这一点以后更容易理解。在

相关问题 更多 >