gpt4 book ai didi

python - Django - 遵循外键关系(即 SQL 中的 JOIN)

转载 作者:行者123 更新时间:2023-12-02 17:55:50 26 4
gpt4 key购买 nike

忙着玩 django,但有一件事似乎让我绊倒,那就是遵循外键关系。现在,我在编写 SQL 方面拥有丰富的经验,因此我可以解决这个问题。如果 ORM 不存在,则返回结果。

基本上这是我想要返回的 SQL 查询

Select
table1.id
table1.text
table1.user
table2.user_name
table2.url
from table1, table2
where table1.user_id = table2.id

我的模型类已定义为:

class Table1(models.Model):
#other fields
text = models.TextField()
user = models.ForeignKey('table2')

class Table2(models.Model):
# other fields
user_name = models.CharField(max_length=50)
url = models.URLField(blank=True, null=True)

我已经浏览了 django 网站上有关查询集、模型和 View 的文档和引用。但目前还不清楚如何做到这一点。

我还使用通用 ListView 设置了网址,但希望从模板中的第二个表访问user_name 字段。我在 urls.py 中尝试了 select_lated ,也通过 shell 尝试过,但它似乎不起作用。请参阅下面的示例。

url 中的配置

url(r'^$','django.views.generic.list_detail.object_list', { 'queryset': Table1.objects.select_related() }),

在外壳

>>> a = Table1.objects.select_related().get(id=1)
>>> a.id
1
>>> a.user_name
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'Table1' object has no attribute 'user_name'

所以基本上,

  • 我做错了什么?
  • 我错过了什么吗?
  • 将同一查询集中两个表中的字段传递到模板的最佳方法是什么(以便可以访问两个表中的字段)
  • 这可以通过通用 View 来完成吗?

最佳答案

这样的事情应该有效:

u = Table1.objects.get(id=1)
print u.id
print u.user.user_name

如果您想遵循外键,则必须明确执行。当您从 Table1 检索对象时,您不会获得自动联接。当您访问外键字段(本例中为 user)时,您只会从 Table2 中获取一个对象

关于python - Django - 遵循外键关系(即 SQL 中的 JOIN),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1232172/

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