我正在尝试从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()参数必须是字符串或数字,而不是'QuerySet'
EDIT2:看起来这个问题比我想象的要多。我现在无法获得任何价值。
g=Group.objects.all()
不会向模板返回值。该模板解析了base.html调用,但尝试仅显示{{ group.group_nm }}
不起作用。
EDIT3:让它返回群组名称(抱歉混淆)。
答案 0 :(得分:1)
我认为您要做的是从activity_set
指定的群组中过滤group_nm
(请参阅backward relations):
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...)
答案 1 :(得分:0)
经过测试,解决方案非常简单。
使用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)
然后它就像一个魅力。