【问题标题】:Django - how to get needed data from multiple modelsDjango - 如何从多个模型中获取所需的数据
【发布时间】: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 是变量,它们不应该用引号引起来。目前您将它们用作字符串。

标签: django object view get models


【解决方案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) 库,与本题无关
  • 我无法回答自己的问题,我的名声很小))
猜你喜欢
  • 1970-01-01
  • 2018-07-02
  • 2020-09-13
  • 2017-11-25
  • 2020-09-19
  • 2012-06-22
  • 2021-02-14
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多