gpt4 book ai didi

django - 从 Django 中的不同类获取值

转载 作者:行者123 更新时间:2023-12-02 01:00:37 25 4
gpt4 key购买 nike

作为 Python 和 Django 的新手,我遇到了一个我认为很简单但又不想消失的问题。我有一个“表”,其中包含从

class TjgFaktor(models.Model):
typ = models.CharField(max_length=2)
factor = models.FloatField()

接下来我有另一个外键类:

class Moment(models.Model):
typ = models.ForeignKey(TjgFaktor,on_delete=models.SET_NULL,null=True)

现在,我想要做的是从第一类中获取因子作为 Moment 的属性。我试过了

def factor(self):
return TjgFaktor.objects.get(typ=self).factor

希望得到正确的因子。然而,当我做类似的事情时

person_moment = Moment.objects.all()    
for e in person_moment:
print(e.factor())

我得到的是“TjgFaktor 匹配查询不存在”。

那么我应该怎么做呢?我猜这是函数:如果我将 type=self 替换为 pk=1,它就会工作。

最佳答案

您不需要通过显式 查询获取TjgFaktor。如果您查询 some_moment.typ,Django 本身将执行隐式查询以获取对应于 MomentTjgFaktor(通过外键) 或 None,如果外键设置为 None

我们可以这样查询:

def factor(self):
tjgfaktor = <b>self.typ</b>
if tjgfaktor:
return tjgfaktor<b>.factor</b>

如果没有相关的TjgFaktor,那么这个函数也会返回None

如果你定义了大量的值,那么这个获取可能是低效的:Django 将从数据库中获取所有列,并且因为我们只对一个感兴趣,所以这将因此导致一些开销。

我们可以通过使用以下查询来避免这种情况:

def factor(self):
if self.typ<b>_id</b>:
return (TjgFaktor.objects<b>.values_list('factor', flat=True)</b>
.get(<b>pk=self.typ_id</b>))

关于django - 从 Django 中的不同类获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50802030/

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