Django动态过滤与M2M领域的optiona参数
问题描述:
我想做一个ListView接受可选参数作为查询集的过滤器使用。Django动态过滤与M2M领域的optiona参数
现在,我已经我的模型:
class Author(models.Model):
name = models.CharField(max_length=100, default='')
surname = models.CharField(max_length=100, default='')
def __unicode__(self):
return "%s %s" % (self.name,self.surname)
class Tag(models.Model):
name = models.CharField(max_length=100, default='')
def __unicode__(self):
return "%s" % (self.name)
class Publication(models.Model):
title = models.CharField(max_length=100, default='')
authors = models.ManyToManyField(Author,blank=True, null=True)
conf = models.CharField(max_length=100, default='')
year = models.IntegerField(default=0)
tags = models.ManyToManyField(Tag,blank=True, null=True)
def __unicode__(self):
return "%s" % (self.title)
,我以这种方式映射的URL
URL(R '^出版物/(P *)/?',PublicationList.as_view (),名称=“出版物清单”),
的想法是publications
后可选参数追加,像 year=2012
或year=2012&tags=food
或year=2012&tags=food,car&authors=bobby
这样的东西,给我FR eedom在做过滤。 顺便说一句,这是正确/标准的方式来通过网址传递多个参数?
现在,我这的ListView类
class PublicationList(ListView):
template_name = 'publications.html'
context_object_name='pubs'
def get_queryset(self):
...
与self.kwargs['optional']
我可以得到这些参数的完整字符串。但是:我是否必须对数据执行所有过滤操作? 所以做分裂&然后在结果列表(args
)做一个for并检查每个值(arg
)如果是年份(arg=='year'
)然后做filter(year=arg)
?
有没有什么能为我或更好的事情做到这一点?
此外,由于我与标签和作者有m2m的关系,我如何对标签进行相同的过滤?基本上我必须检查标签值是否与M2M关系中的任何tag.name
匹配。
侨
你知道这个的一个运行的例子吗?我试图理解它究竟做了什么。 – EsseTi
或多或少与django admin相同。它像这样配置URL:http://www.domain.com/view/?relatedmodel__field = blah&field = yes&otherrelatedmodel__field = something'并且查询参数直接传递给一个'filter'作为kwargs –
Josh,难道你不知道如果这个应用程序使用_exactly_与django管理应用程序相同的代码? –