私は自分の会社の Web サイト用に CMS を構築しています (既存の Django ソリューションを調べたところ、よりスリムでシンプルで、私たちの状況を具体的に処理するものが必要です..さらに、このことをよりよく学びたいです)。一般的な関係に頭を悩ませています。
私たちのウェブサイトのコンテンツを定義するモデルPage
、SoftwareModule
モデル、およびその他のいくつかのモデルがあり、それぞれがget_absolute_url()
定義されています。Page
ユーザーが任意のインスタンスに、他のページ インスタンスを含む任意のタイプのオブジェクトのリストを割り当てられるようにしたいと考えています。このリストは、そのPage
インスタンスのサブメニューになります。
私は次のことを試しました:
class Page(models.Model):
body = models.TextField()
links = generic.GenericRelation("LinkedItem")
@models.permalink
def get_absolute_url(self):
# returns the right URL
class LinkedItem(models.Model):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
title = models.CharField(max_length=100)
def __unicode__(self):
return self.title
class SoftwareModule(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
def __unicode__(self):
return self.name
@models.permalink
def get_absolute_url(self):
# returns the right URL
これにより、API to do との一般的な関係が得られますpage_instance.links.all()
。向かっています。どのようにやってのけるかわからないのは、ページインスタンスの変更フォーム、そのページとデータベース内の他の現存するオブジェクトとの間の関係を作成する方法です。私の望む最終結果:テンプレートで次をレンダリングします:
<ul>
{% for link in page.links.all %}
<li><a href='{{ link.content_object.get_absolute_url() }}'>{{ link.title }}</a></li>
{% endfor%}
</ul>
もちろん、気づいていないことや誤解していることはありますが、自分が知らないことを知らないという領域に足を踏み入れているような気がします。私は何が欠けていますか?