gpt4 book ai didi

django - 如何在 Django 中过滤连接模型?

转载 作者:行者123 更新时间:2023-12-02 03:58:40 25 4
gpt4 key购买 nike

我有以下型号:

class Street(models.Model):
name = models.CharField(max_length=40)

class House(models.Model):
street = models.ForeignKey(Street, models.PROTECT)
number = models.CharField(max_length=10)

class Meta:
unique_together = ('street', 'number')

class Room(models.Model):
house = models.ForeignKey(House, models.PROTECT)
number = models.CharField(max_length=10)

class Meta:
unique_together = ('house', 'number')

我已经知道一条街道的ID,并且想获取该街道上所有房屋的所有房间。在 SQL 中这很简单:

SELECT *
FROM room JOIN house ON house.id = room.house_id
WHERE house.street_id = xyz;

现在我该如何在 Django 中执行此操作?我试过了

Room.objects.select_related('house').filter(street=xyz)

但我收到一个异常,说我无法访问此字段:

django.core.exceptions.FieldError: Cannot resolve keyword 'street' into field. Choices are: house, house_id, id, number

由于我面临的数据量很大,我真的希望能够使用单个查询进行连接和过滤!当放弃其中之一时,我将不得不求助于在 Python 中进行多个查询或过滤,这两种方法本质上都是低效的。我想,另一种选择是原始查询......

最佳答案

您可以使用 __ 语法访问相关对象的字段:

Room.objects.select_related('house').filter(house__street=xyz)

这可以根据您需要的时间完成,要按街道名称选择房间,您可以执行以下操作:

Room.objects.select_related('house').filter(house__street__name=xyz)

查看详情here .

关于django - 如何在 Django 中过滤连接模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48685555/

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