让我们说我有以下模型:
from django.db import models
class X(models.Model):
...
class Y(models.Model):
...
x = models.ForeignKey(X, on_delete=models.CASCADE)
class Z(models.Model):
...
y = models.ForeignKey(Y, on_delete=models.CASCADE)
现在,在常规查询中,我可以像这样链接select_related()
函数:
z = Z.objects.select_related('y__x').get(pk=1)
这将自动获取相关的X
和Y
对象。现在,如果我想在select_related()
类的重写Z
方法中使用save()
,该怎么办。我将如何去做呢?谢谢。
答案 0 :(得分:1)
您不能在save
方法中使用它,因为select_related
是一个查询集方法,而不是实例方法
但是,如果您这样做
z = Z.objects.select_related('y__x').get(pk=1)
....
z.save()
您将获得预期的行为,因为y
将x
和select_related
合并在一起,因此不会有其他数据库查询。
如果不使用select_related
-
z = Z.objects.get(pk=1)
....
z.save()
您仍然可以在y
方法中引用x
和save
。在这种情况下,django将执行其他数据库查询以获取相关数据。