エントリとコンテナを含むアプリケーションがあります。それらの間にはManyToManyの関係があります。
- コンテナに0個以上のエントリが含まれている
- エントリが0個以上のコンテナにある
URIには次のスキーマを使用します。
- プレフィックス/コンテナ
- プレフィックス/コンテナ/エントリ
これは、複数のURLが同じエントリにつながる可能性があることを意味します。各URLは異なるコンテキストを定義します。
コンテナごとにRSS/Atomフィードを作成しようとしています。私の問題はFeed.item_link
、正しいURLを返すメソッドを実装する方法です。urlresolvers.reverse
コンテナ識別子とエントリ識別子の2つの引数を使用して呼び出す必要があります。残念ながら、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
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,
})