Python 使用django中的过滤器遍历m2m

Python 使用django中的过滤器遍历m2m,python,django,many-to-many,django-views,Python,Django,Many To Many,Django Views,我试图从m2m关系中返回筛选后的值,以便在模板中使用。应该很琐碎,但我不能让它工作 我试着在描述的模型中这样做,但没有成功。现在,我在视图中尝试一种可能更简单的方法,如上所述,但也无法让它工作 class Activity(models.Model): activity_nm = models.CharField(max_length=60) enddt = models.DateField() groups = models.ManyToManyField(Gro

我试图从m2m关系中返回筛选后的值,以便在模板中使用。应该很琐碎,但我不能让它工作

我试着在描述的模型中这样做,但没有成功。现在,我在视图中尝试一种可能更简单的方法,如上所述,但也无法让它工作

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()参数必须是字符串或数字,而不是“QuerySet”

EDIT2:看起来这个问题比我想象的要复杂得多。我现在无法获取任何要返回的值

g=Group.objects.all()
不会将值返回到模板。该模板解析base.html调用,但试图让
{{{group.group\u nm}}
出现是不起作用的


EDIT3:返回组名(很抱歉混淆)

我认为您要做的是从
group\u 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...)

经过测试,解决方案非常简单

使用
g=Activity.objects.filter(groups\uu in=[Group.objects.filter(Group\u nm=Group\u nm)],enddt\uu gt=now)
可以将一个iterable放入django不知道如何索引的列表(
[QuerySet]

解决方案是转储列表:

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

然后它像一个符咒一样工作。

错误到底是什么?错误会有帮助的,不是吗。现在添加。是否有使用
RequestContext
的原因?如果您不执行特殊操作,您就不需要它。您需要模板中的
Group.Group\u nm
?是的,它显示在标题中。我进行了更改,但出现以下错误:“ManyRelatedManager”对象没有属性“objects”。这是一个M2M关系,而不是FK。@jabs尝试直接从管理器中筛选:
group\u instance.activity\u set.filter(enddt\u gt=now)
查询不会返回任何内容。它会解析,因为它会显示base.html,但不会显示任何值。我稍微修改了它
g=group\u instance.activity\u set.all()
,以消除数据或日期问题,但它仍然不返回值。谢谢@RickyA,但我得到了相同的int()。。。不是QuerySet错误。谢谢@RickyA,看起来我遇到的麻烦比我意识到的要多(参见上面的编辑)。我得到的结果与@mVChr解决方案相同。将返回base.html,但不返回任何值。不要忘记,您也在enddt上进行筛选。这就是我在测试代码时遇到的问题。即使删除该筛选器也会得到相同的结果:
g=Activity.objects.filter(groups\uu in=Group.objects.filter(Group\u nm=Group\u nm))#,enddt\uu gt=now)
我还删除了使用contextprocessor简化事情的分页