簡體   English   中英

Django在views.py中獲取外鍵數據

[英]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(....)

與Django文檔有關的select_related。 網站

由於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM