如何对多个到多个字段的get_absolute_url进行反向操作?

时间:2011-06-02 09:04:18

标签: python django django-models django-urls

我有一个包含多对多字段的模型,我需要从多个字段中选择一个ID。我用get_absolute_url装饰器修饰了permaling方法。它不起作用。所以我明白我需要扭转这种关系,从痕迹中可以看出这一点,但我真的不明白我应该怎么做?

型号:

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 })

我尝试使用reverse(),但我的方法行为没有改变。

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

3 个答案:

答案 0 :(得分:1)

没有看到网址格式。

self.filter_ids不会返回ID列表,例如。

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

会返回[1,2,3]

答案 1 :(得分:0)

您没有发布您的网址但是这样的内容应该可以使用

网址

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

答案 2 :(得分:0)

我是这样做的: URL

 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, })

我杀了@ Permalink,因为API永久链接装饰器不可用,将我的ID转换为字符串,并执行相反的功能。不同页面的相同网址的问题仍然存在,但它对我的应用程序并不重要,因为它永远不会。