Python 使用django中的过滤器遍历m2m
我试图从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
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简化事情的分页