我欢迎任何有关我的问题的帮助。我试图在多表继承情况下向后关注一个子类。
即。我想要一个特定州所有餐馆的查询集。
这是我的问题的简化示例(例如在django的文档中的修改);
from django.db import models
class Place(models.Model):
state = models.ForeignKey('State')
name = models.CharField(max_length=50)
address = models.CharField(max_length=80)
class Restaurant(Place):
serves_hot_dogs = models.BooleanField(default=False)
serves_pizza = models.BooleanField(default=False)
class State(models.Model):
state = models.CharField(max_length=50)
如果我尝试state.restaurant_set.all()
,我会收到例外
'州'对象没有属性'Restaurant_set'
但是,如果我尝试使用state.place_set.all(),我会收到该状态的一组查询,但我真的只想要该州的餐馆。
任何人都可以就如何正确制定我的查询集提供一些建议,或提供一些其他如何实现这一目标的建议吗?
非常感谢任何帮助
答案 0 :(得分:0)
在您的Place
模型中,您已将外键定义为State
,从而可以使用语句state.place_set.all()
进行反向查找。
相反,您的Restaurant
模型中没有任何外键指向State
,因此您无法运行反向查找。
您应该在Restaurant
中添加一个指向Place
的外键,这样您就可以从州获取地点,然后从地点获取餐馆。或者,甚至可能更好,Place
中的多个关系指向Restaurant
,这样来自State
的反向查找会更容易。
要小心,因为这类查询往往非常昂贵,而且您可能需要使用select_related和prefetch_related语句来解释您获取内容的方式
答案 1 :(得分:0)
您无法从State
向Restaurant
向后关注外键,但您可以通过使用餐馆的继承外键过滤来获得相同的结果: / p>
restaurants = Restaurant.objects.filter(state=state)