gpt4 book ai didi

python - Django - 通过相关字段的 ID 获取对象

转载 作者:太空宇宙 更新时间:2023-11-03 19:21:51 25 4
gpt4 key购买 nike

假设我们有以下模型:

from django.db import models

class Foo(models.Model):
name = models.CharField(max_length=50)

class Bar(models.Model):
name = models.CharField(max_length=50)

class Zomg(models.Model):
foo = models.ForeignKey(Foo)
bar = models.ForeignKey(Bar)

Zomg 模型中,foobar 字段用作组合键,即对于任何一对 (foo code>, bar) 只有一个 Zomg 对象。

在我的项目中,我需要不时更新数千条 Zomg 记录,因此查找记录的效率非常重要。问题是我不能只将 foo_idbar_id 传递给 Zomg.objects.get() 方法:

>>> z = models.Zomg.objects.get(foo_id=1, bar_id=1)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/lib/python2.7/site-packages/django/db/models/manager.py", line 132, in get
return self.get_query_set().get(*args, **kwargs)
File "/usr/lib/python2.7/site-packages/django/db/models/query.py", line 341, in get
clone = self.filter(*args, **kwargs)
File "/usr/lib/python2.7/site-packages/django/db/models/query.py", line 550, in filter
return self._filter_or_exclude(False, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/django/db/models/query.py", line 568, in _filter_or_exclude
clone.query.add_q(Q(*args, **kwargs))
File "/usr/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1194, in add_q
can_reuse=used_aliases, force_having=force_having)
File "/usr/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1069, in add_filter
negate=negate, process_extras=process_extras)
File "/usr/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1260, in setup_joins
"Choices are: %s" % (name, ", ".join(names)))
FieldError: Cannot resolve keyword 'foo_id' into field. Choices are: bar, foo, id

但是,当实例化对象时,foo_idbar_id 几乎可以访问:

>>> z.foo_id
1
>>> z.bar_id
1

现在我被迫先获取 FooBar 对象,然后使用它们来获取所需的 Zomg 对象,从而产生两个不必要的对象数据库查询:

>>> f = models.Foo.objects.get(id=1)
>>> b = models.Bar.objects.get(id=1)
>>> z = models.Zomg.objects.get(foo=f, bar=b)

所以问题是,如何通过相关字段的 ID 获取 Zomg 对象?

最佳答案

试试这个:z = models.Zomg.objects.get(foo__id=1, bar__id=1)

关于python - Django - 通过相关字段的 ID 获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9445782/

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