如何在多对多字段中反向使用get_absolute_url?

1 投票
3 回答
1703 浏览
提问于 2025-04-16 18:49

我有一个模型,它有很多对多的字段,我需要从这个很多对多的字段中获取一个选中的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

我这样做的:

网址

 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里的Permalink装饰器没法用。我把我的ID转换成字符串,经过几个步骤后再应用反转函数。虽然不同页面的URL还是会重复,但对我的应用来说这没关系,因为它永远不会出现这个问题。

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 教程

1

没有看到网址的格式。

self.filter_ids 并不会返回一个 id 的列表,类似这样的。

self.filter_ids.all().values_list('id', flat=True) 会返回 [1,2,3]

撰写回答