[英]Django get foreign key data within views.py
我從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);
如果有人知道我如何使它工作,我將不勝感激!
提前致謝,
路加
根據您的定義,事件可以在多個縣中發生。 因此,事件對象具有County
集,您可以通過以下方式訪問它們:
event_obj.county_set.all()
county_set()
是RelatedManager
因此您可以對其執行.filter()
.get()
等。
objs = EventCounty.objects.filter(event__in=listevents)
countyList = []
for obj in objs:
countyList.append(obj.county)
如果要包含引用的對象,請檢查select_related
EventCounty.objects.select_related('event').filter(....)
由於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一樣使用它(過濾,排除,排序,切片等)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.