我有一个包含多对多字段的模型,我需要从多个字段中选择一个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 })
答案 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>
答案 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转换为字符串,并执行相反的功能。不同页面的相同网址的问题仍然存在,但它对我的应用程序并不重要,因为它永远不会。