2013-02-08 42 views
0

我試圖從模板中使用的m2m關係中返回過濾值。應該是微不足道的,但我無法讓它工作。在django中使用過濾器遍歷m2m

我試圖在here模型中做到這一點,並沒有得到它的工作。現在我在視圖中嘗試了一種可能更簡單的方式,描述爲here,但無法使其工作。

class Activity(models.Model): 
    activity_nm = models.CharField(max_length=60) 
    enddt = models.DateField() 
    groups = models.ManyToManyField(Group) 
    def __unicode__(self): 
     return self.activity_nm  

class Group (models.Model): 
    group_nm = models.CharField(max_length=64) 
    def __unicode__(self): 
     return self.group_nm   



def group_details_page(request, group_nm): 
    g=Activity.objects.filter(groups__in=[Group.objects.filter(group_nm=group_nm)],enddt__gt=now) 
    return render_to_response('group_details_page.html', {'group': g},context_instance=RequestContext(request)) 

我的目標是返回活動的結束日期>現在在模板中可用的一個組的所有活動。

謝謝。

編輯:有收到的錯誤是: int()函數的參數必須是字符串或數字,而不是「查詢集」

EDIT2:它看起來像有更多的這個問題比我想象的。我現在無法獲得任何值。

g=Group.objects.all() 

不會將值返回給模板。該模板解決了base.html調用,但試圖僅顯示{{ group.group_nm }}不起作用。

EDIT3:知道它返回組名稱(抱歉的混淆)。

+0

究竟是什麼錯誤? – RickyA 2013-02-08 22:10:58

+0

錯誤會有所幫助,不是。現在添加。 – jabs 2013-02-09 02:29:57

+0

你有使用'RequestContext'的原因嗎?如果你不做特殊的[上下文預處理](https://docs.djangoproject.com/en/dev/topics/http/shortcuts/#render-to-response),你不需要它。 – RickyA 2013-02-11 21:04:39

回答

0

測試它和解決方案是非常簡單的。

With g=Activity.objects.filter(groups__in=[Group.objects.filter(group_nm=group_nm)],enddt__gt=now)你把一個迭代列表([QuerySet])哪django不知道如何索引。

的解決方法是轉儲列表理解:

g=Activity.objects.filter(groups__in=Group.objects.filter(group_nm=group_nm),enddt__gt=now) 

,然後它的工作原理就像一個魅力。

+0

謝謝@RickyA,但我得到了相同的int()...沒有QuerySet錯誤。 – jabs 2013-02-11 16:58:49

+0

謝謝@RickyA,看起來我比我意識到更麻煩(請參閱上面的編輯)。 – jabs 2013-02-11 17:41:01

+0

我得到了與@mVChr解決方案相同的結果。將返回基地。HTML,但沒有值。 – jabs 2013-02-11 18:51:22

1

我想你想要做的是過濾activity_set(見backward relations)從group_nm指定的組:

def group_details_page(request, group_nm): 
    group_instance = Group.objects.get(group_nm=group_nm) 
    activities = group_instance.activity_set.objects.filter(enddt__gt=now) 
    return render_to_response(...etc...) 
+0

我做了更改,但得到這個錯誤:'ManyRelatedManager'對象沒有屬性'objects'。這是M2M關係,而不是FK。 – jabs 2013-02-09 02:26:24

+0

@jabs嘗試直接從管理器過濾,然後:'group_instance.activity_set.filter(enddt__gt = now)' – mVChr 2013-02-09 05:39:43

+0

導致int()...不再發生QuerySet錯誤。 – jabs 2013-02-11 17:06:03