gpt4 book ai didi

python - 调用 .save() 后 Django 模型不更新

转载 作者:行者123 更新时间:2023-11-28 22:28:05 27 4
gpt4 key购买 nike

在我的 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})

查看:

def EventApprove(request, id=None, **kwargs):

instance = get_object_or_404(Event, id=id)

instance.approval.id = 3
instance.save()

messages.success(request, "Event Approved")
return redirect("RGAU:UserDashboard")

目标是在网页上按下按钮时将 Event 实例更新为“已批准”(因此 View EventApprove)。

instance.approval.id 应该分配正确的批准状态 id 但未提交保存。

我做错了什么?

最佳答案

您可以通过两种不同的方式来做到这一点。如果您只有要关联的相关对象的 pk(id) 值,请使用 fieldname_id 语法,如下所示:

instance.approval_id = 3
instance.save()

如果你手边有关系的实例,你可以直接分配它:

approved = EventStatus.objects.get(id=3)
instance.approval = approved
instance.save()

无论哪种方式,您的 instance.approval 现在都将与 id=3 的 EventStatus 相关联。

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

instance.approval_id 有点神奇,Django 允许您直接设置关联两个模型的数据库列值。绕过从数据库中实际获取 EventStatus 实例的需要以便能够将其与事件相关联。当您使用永远不会改变的众所周知的引用 ID 值时,在这种情况下它会很方便。但即便如此,最好在某处定义它们,例如:

class EventStatus(models.Model):
APPROVED = 3

... etc etc...

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

关于python - 调用 .save() 后 Django 模型不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43749110/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com