我有一个带有条目和容器的应用程序。它们之间存在ManyToMany关系:
- 一个容器包含 0 个或多个条目
- 一个条目在 0 个或多个容器中
我对 URI 使用以下架构:
- 前缀/容器
- 前缀/容器/条目
这意味着多个 URL 可以指向同一个条目。每个 URL 定义不同的上下文。
我正在尝试为每个容器创建一个 RSS/Atom Feed。我的问题是如何实现Feed.item_link
返回正确 URL 的方法。我需要urlresolvers.reverse
使用两个参数进行调用:容器标识符和条目标识符。不幸的是 item_link 只接收条目作为参数。只有Feed.get_object
方法知道容器。解决此问题的最干净的解决方案是什么?
示例代码如下:
楷模
class Entry(models.Model):
pass
class Container(models.Model):
entries = models.ManyToManyField("Entries",
related_name='containers',
null=True,
blank=True
)
网址
url(r'^prefix/(?P<container_slug>[-\w]+)/rss$', feeds.LatestEntries()),
喂养
class LatestEntries(Feed):
title = "foo"
description = "bar"
def get_object(self, request, container_slug):
return get_object_or_404(models.Container, slug=container_slug)
def item_link(self, entry):
# TODO: How to pass container_slug to reverse() ?
return urlresolvers.reverse('up.views.portfolio_image', kwargs={
'container_slug': 'FIXME',
'entry_slug': entry.slug,
})