如何在多对多字段中反向使用get_absolute_url?
我有一个模型,它有很多对多的字段,我需要从这个很多对多的字段中获取一个选中的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]