2016-09-14 58 views
0

我有cbt generic listview我想用两个slu filtering筛选。但slug_url_kwargs只允许传递单个字符串。我如何更新slug_url_kwarg以支持多个slu??或者我还能做些什么呢?基于类的视图django多个slu 012

所以我有这个模型和视图功能

class SaityProfile(models.Model): 
    user = models.ForeignKey(User, default=0) 
    about = models.CharField(max_length=255, blank=True) 
    name = models.CharField(max_length=255) 
    url = models.CharField(max_length=255, unique=True) 

    def __unicode__(self): 
     return self.name 

class Saity(models.Model): 
    profile = models.ForeignKey('SaityProfile', null=True) 
    user = models.ForeignKey(User, null=True) 
    name = models.CharField(max_length=250) 
    url = models.CharField(max_length=250, default=gen_slug_page) 
    desc = models.CharField(max_length=250, blank=True) 
    order = models.IntegerField(default=1) 

    def get_absolute_url(self): 
     return reverse('sites:website_pages', kwargs={'website_slug': self.url}) 

class WebsitesProfileList(generic.ListView): 
    model = Saity 
    slug_field = 'url' 
    slug_field_kwargs = 'profile_url' 
    template_name = 'saity_ds/websites_profile_list.html' 

    def get_context_data(self, **kwargs): 
     self.profile = SaityProfile.objects.get(url=self.kwargs['profile_url']) 
     extra_context = { 
      'profile': self.profile 
     } 
     context = super(WebsitesProfileList, self).get_context_data(**kwargs) 
     context.update(extra_context) 
     return context 

我的代码看起来像这样类似。我想添加新功能。我选择了基于班级的观点,并且我认为这是我的错误,因为目前还不清楚

+0

'ListView'完全不使用'slug_url_kwarg'。请[编辑]您的问题以包含更多信息,例如您的网址格式,模型以及要过滤的字段。 – Alasdair

+0

谢谢,我的意思是slu url在urlconf,如果我有两个slu what,我想过滤基于slu k kwargs? –

+0

你没有添加任何更多的信息到你的问题,因为我问。如果包含模型,slug字段的名称,url模式以及您迄今为止尝试过的任何视图,则回答您的问题要容易得多。如果你不包含这些信息,那么你就要求我们发明一些例子。这使得难以回答,所以你可能得不到答复。 – Alasdair

回答

0

您根本不需要设置slug_url_kwarg。只需覆盖get_queryset并返回您希望视图显示的查询集。

class WebsitesProfileList(generic.ListView): 
    def get_queryset(self): 
     return Saity.objects.filter(url=self.kwargs['url'], profile=self.kwargs['profile']) # You will probably have to change this 
    ... 
+0

我梦想着干净的短期配置,我害怕超级功能 –

+0

是的,我知道如何添加和使用过滤器。我不喜欢重写方法,我认为它有干净的方式 –

+0

重写'get_queryset'是一种[标准技术](https://docs.djangoproject.com/zh/1.10/topics/class-based-views/generic-显示/#动态过滤)在Django泛型基于视图。 ListView没有'slug_field_kwarg'选项,所以在这种情况下我想不出另一种方法。在我的例子中,没有必要调用'super()',你明确地调用了'Saity.objects.filter()'(如果你愿意,你可以调整这个例子来使用'super()')。 – Alasdair