Django在views.py中获取外键数据

时间:2013-06-21 11:52:10

标签: python django web

我开始使用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 个答案:

答案 0 :(得分:0)

正如您所定义的,事件可以在多个县。因此,事件对象设置为County,您可以将其作为

进行访问
event_obj.county_set.all()

county_set()RelatedManager,因此您可以对其进行.filter().get()等。

答案 1 :(得分:0)

objs = EventCounty.objects.filter(event__in=listevents)
countyList = []
for obj in objs:
    countyList.append(obj.county)

答案 2 :(得分:0)

如果要包含引用的对象,请选中select_related

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

select_related on Django doc. sites

答案 3 :(得分:0)

由于EventCount模型将ForeignKey保存到Event模型,因此相当简单 - ForeignKey启用“向后”关系(请参阅Django documentation)。在你的情况下,这可能看起来像:

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(过滤,排除,顺序,切片等)一样使用它。