Django - 如何从多个模型中获取所需的数据
Posted
技术标签:
【中文标题】Django - 如何从多个模型中获取所需的数据【英文标题】:Django - how to get needed data from multiple models 【发布时间】:2011-11-04 10:18:57 【问题描述】:event = Event.objects.filter(org=request.org).select_related("event_def", "location", "space")
我得到这样的东西
第一个对象 阿拉木图之夜#some event_def 内部-->Sary Arka #location 内部位置-->Hall 7 #place inside place-->3 мая 1991 г. 0:00:00 #事件 第二个对象 阿拉木图之夜#some event_def 内部-->欧米茄 #location 内部位置-->Hall 2 #place inside place-->6 мая 1991 г. 0:00:00 #事件
我需要一个 event_def 并在多个位置..etc
事件模型
org = models.ForeignKey(Organization)
event_def = ChainedForeignKey(EventDef,
chained_field = "org",
chained_model_field = "org",
show_all = False,
auto_choose = True
)
location = ChainedForeignKey(Location,
chained_field = "org",
chained_model_field = "org",
show_all = False,
auto_choose = True
)
space = ChainedForeignKey(Space,
chained_field = "location",
chained_model_field = "location",
show_all = False,
auto_choose = True
)
time = models.DateTimeField()
enabled = models.IntegerField(choices = ns.FULL_ENABLE_STATUSES, default = ns.ENABLED_STATUS)
objects = EnableDisableManager()
【问题讨论】:
请问您可以在这里发布您的Event
型号代码吗?
如果 org 和 location 是变量,它们不应该用引号引起来。目前您将它们用作字符串。
【参考方案1】:
您是说您希望能够为一个活动获取多个位置吗?如果你这样做了,那么你的数据模型是错误的。对于有多个地点的活动,您需要这样做:
class Event(models.Model):
org = ...
event_def = ...
space = ...
...
class Location(models.Model):
event = models.ForeignKey(Event, related_name='locations')
...
然后在你的模板中你就可以这样做了:
event
% for location in event.locations %
location
% endfor %
【讨论】:
您可以通过在 () 中列出字段名来跟踪与 select_related() 的特定关系,请参阅文档中 select_related() 部分的底部。 没问题。如果您真的只关心获取几个 FK 字段的相关模型,它确实可以帮助减少具有大量 FK 字段的模型的查询时间。 您好 Moncler - 在 Stack Overflow 上发布您找到的答案是一种很好的做法。回答您自己的问题,以便将来发现此问题的其他人有所帮助! 我使用了 Dajax(Dajaxice) 库,与本题无关 我无法回答自己的问题,我的名声很小))以上是关于Django - 如何从多个模型中获取所需的数据的主要内容,如果未能解决你的问题,请参考以下文章