0

我从 django 开发开始,我被困住了一些价值。在我看来,这应该很简单。

我有多个模型,但在我看来,我很难从事件本身中获取区域(县)。下面我有一个非常简短的事件代码示例(但不是很相关,如果您需要更多内容,请询问)。

class Event(models.Model):
    organiser = models.ForeignKey(User)
    etc...

问题是单个事件可以在多个区域进行广告(受限于事件类型)。为了确保它不是多对多,我定义了一个事件县如下:

class EventCounty(models.Model):
    county = models.ForeignKey(county)
    event = models.ForeignKey(event)

现在问题在于视图,对于我的索引页面,我想显示最近添加的 5 个和即将发生的 5 个事件。这非常简单,因为我可以通过 Event 中的 date_added 和 event_date 字段进行排序。但是,我不确定如何从这些数据中访问该县。

我假设我可以自己编写 sql 语句(这很简单),但是,如果可能的话,我想留在 django 框架内并使用他们的代码。我相信以下声明将是我需要翻译的内容(它可能有效,也可能无效!)。

select county from EventCounty where event in (listevents);

如果有人知道我如何让它工作,我将不胜感激!

提前致谢,

卢克

4

4 回答 4

1

如果要包含引用的对象,请检查 select_related

EventCounty.objects.select_related('event').filter(....)

Django 文档上的 select_related。网站

于 2013-06-21T13:03:03.013 回答
0

正如您所定义的,一个事件可以在多个县。所以事件对象有一组County你可以访问它们

event_obj.county_set.all()

county_set()这样你就RelatedManager可以做.filter().get()等等。

于 2013-06-21T12:07:02.757 回答
0

由于 EventCount 模型拥有一个 ForeignKey 到 Event 模型,它相当简单 - ForeignKey 启用“向后”关系(请参阅Django 文档)。在您的情况下,这可能如下所示:

events = Event.objects.all().order_by(<put your date field here>)[:5]

要获取所有 EventCounty 对象的列表(或 QuerySet),例如第一个 Event 对象,只需使用:

events_county = events[0].eventcounty_set.all()

正如 Rohan 所建议的,eventcounty_set 是一个 RelatedManager,这意味着您可以像使用 QuerySet(过滤器、排除、排序、切片等)一样使用它。

于 2013-06-21T15:10:42.777 回答
0
objs = EventCounty.objects.filter(event__in=listevents)
countyList = []
for obj in objs:
    countyList.append(obj.county)
于 2013-06-21T12:54:33.273 回答