複数の「モジュール」(それぞれがdjangoアプリとして)を使用して、djangoで単純なCMSを作成しています。以下のモデルをセットアップしました。
class FooObject(models.Model):
id = models.SlugField(primary_key=True)
name = models.CharField(max_length=255)
creator = models.ForeignKey(auth.models.User, editable=False, related_name="createdby")
class FooPage(FooObject):
content = models.TextField(blank=True, null=True)
@models.permalink
def get_absolute_url(self):
return ('page', (), {'page_id':self.id}
class FooSubitem(FooObject):
parent = models.ForeignKey(FooPage, related_name='subitems')
各モジュールで、FooPage のサブクラスと FooSubitem の少なくとも 1 つのサブクラスを作成します。
# in FooBlog.models
class FooBlog(FooPage):
owner = models.ForeignKey(auth.models.User, editable=False)
@models.permalink
def get_absolute_url(self):
return ('blog', (), {'blog_id':self.id})
class FooPost(FooSubitem):
post_time = models.DateTimeField(auto_now_add=True)
と
# in FooGallery.models
class FooGallery(FooPage):
location = models.CharField(max_length=255)
@models.permalink
def get_absolute_url(self):
return ('gallery', (), {'gallery_id':self.id})
class FooImage(FooSubitem):
image_file = models.ImageField(upload_to='foogallery')
これらは単純化したものですが、私がやろうとしていることをよく理解していただけるはずです。FooPost と FooImage の管理者では、親選択リストを対応する親ページに制限します。
これらをテンプレートで使用しようとすると、問題が発生します。各ビューには、次のものがあります。
page_list = FooPage.objects.all()
これは、FooBlog と FooGallery の両方のタイプのすべての FooPages のリストを返します。ただし、このリストを反復処理すると、次のようになります。
{% for page in page_list %}{{ page.get_absolute_url }}{% endfor %}
「ブログ」や「ギャラリー」の URL パターンではなく、「ページ」の URL パターンを返します。
後で FooCalendar モジュールを追加したいときに、コードを書き直さなくてもこれを機能させるにはどうすればよいですか? これが可能なモジュールで動作することを確認したいと思います。
ありがとう、
- レクソ