2011-06-02 43 views
1

我有一个多对多的字段模型,我需要从多到多的字段中选择一个ID。我用装饰者permaling装饰了get_absolute_url方法。它不起作用。所以我明白我需要扭转关系,从痕迹中可以看出,但我不明白我该怎么做?如何对get_absolute_url进行反转以获得多个字段?

型号:

class MenuItems(models.Model): 
    reference_value = models.CharField(max_length=255) 
    filter_ids = models.ManyToManyField(Filter, blank = True) 

    def __unicode__(self): 
     return u'%s' % self.reference_value 

    @models.permalink 
    def get_absolute_url(self): 
     return ('homepage_ids', None, {'ids': self.filter_ids }) 

我试着用相反的()做的,但我有方法的行为并没有改变。

@models.permalink 
    def get_absolute_url(self): 
     return reverse('homepage_ids', kwargs={'ids': self.filter_ids }) 
+0

如果两个菜单项具有相同的filter_id集,会发生什么情况? – DrTyrsa 2011-06-02 09:10:14

+0

它会有相同的网址,我想是的。 – I159 2011-06-02 09:16:03

+0

两个(或多个)对象将具有相同的URL?他们中哪些人会向用户展示? – DrTyrsa 2011-06-02 09:17:38

回答

1

没有看到url模式。

self.filter_ids不会返回ID列表,类似。

self.filter_ids.all().values_list('id', flat=True)

将返回[1,2,3]

0

你不发表您的url,但这样的事情,应该工作

网址

url(r'^/something/(?P<var>\d+)/$', view_name, name="homepage_ids"), 

车型

@permalink 
def get_absolute_url(self): 
    return ('homepage_ids', [str(self.filter_ids)]) 

模板

<a href="{{ ids.get_absolute_url }}"> {{ ids }}</a> 

看看到django tutorial

0

我就是这么做的: 网址

url(r'^(?P<ids>\d(&\d)*)?/?$', 'homepage', name='homepage'), 

车型

class MenuItems(models.Model): 
"""Menu items... What???""" 
reference_value = models.CharField(max_length=255) 
filter_ids = models.ManyToManyField(Filter, blank = True, related_name="filter_ids") 

def __unicode__(self): 
    return u'%s' % self.reference_value 

def get_absolute_url(self): 
    int_ids = list(self.filter_ids.all().values_list('id', flat=True)) 
    str_ids = "&".join([str(val) for val in int_ids]) 
    return reverse('homepage', kwargs = {'ids': str_ids, }) 

我杀@永久链接,因为管道rmalink decorator是不可用的,通过几个步骤将我的ID转换为字符串并应用反转函数。同一个网页的问题仍然存在,但它对我的应用程序并不重要,因为它永远不会。

相关问题