3

次のサイト構造があります。

- Windows
    - 98
         - Subpage1
         - Subpage2
    - XP
         - ....
    - 7
    - ....
- Mac
    - 10.7
         - Subpage1
         - Subpage2
    - 10.8
         - ...
    - 10.9
- Ubuntu
    - 13.10

各 OS はアプリであり、相互参照を表す各アプリの追加モデルが必要です。参照は任意のページに移動できます。

したがって、疑似コードは次のようになります。

class Reference(models.Model):
     title = models.CharField(_('title'), max_length=200)
     links_to = models.ForeignKey(Windows | Mac | Ubuntu)

一般的な関係に関するビューの投稿を見つけましたが、問題の解決策を使用できませんでした。

優れた、わかりやすいチュートリアルまたはヘルプへのリンクは素晴らしいでしょう。

ありがとう

編集:

これはうまくいくかもしれないと思いました。しかし、この例では 1 つのプロパティ (スラッグ) にしかアクセスできず、オブジェクト全体にはアクセスできません。

from django.db import models
from itertools import chain

from otherapp.models import Geschaeftsfelder
from otherapp.models import Themenschwerpunkte
from otherapp.models import Themen

from django.utils.translation import ugettext as _
from common.fields import MarkdownTextField, translated_field

class Box(models.Model):

    title = models.CharField(max_length=100)

    headline_de = MarkdownTextField(verbose_name=_(u'Inhaltstext (dt.)'), blank=True)


    geschaeftsfelder = Geschaeftsfelder.objects.values_list('slug', 'title')
    themenschwerpunkte = Themenschwerpunkte.objects.values_list('slug', 'title')
    themen = Themen.objects.values_list('slug', 'title')

    result_list = chain(geschaeftsfelder, themenschwerpunkte, themen)

    links_to      = models.CharField(
                        max_length=200,
                        choices= result_list
                        )

編集2: 一般的なコンテンツタイプを使用したソリューションも試しました:

次のコードを Box モデルに追加すると、適切なコンテンツ タイプ (themenschwerpunkte、geschaeftsfelder など) のドロップダウン リストが表示されます。

しかし、まだ特定のページへのリンクを作成できません。

# http://stackoverflow.com/questions/6335986/how-can-i-restrict-djangos-genericforeignkey-to-a-list-of-models?lq=1
limit = models.Q(app_label = 'geschaeftsfelder', model = 'geschaeftsfelder') | models.Q(app_label = 'geschaeftsfelder', model = 'themenschwerpunkte') | models.Q(app_label = 'geschaeftsfelder', model = 'themen')
content_type = models.ForeignKey(ContentType, limit_choices_to = limit)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')

編集3:

回答と時間を割いていただきありがとうございますが、djangoCMS の代わりに feinCMS を使用します。これは私にとってはるかに理解しやすく、より適しています。

4

1 に答える 1

0

コンテンツ タイプのアプローチが適しているようです。一般的なリレーションに関するdjango ドキュメントは、非常に優れた情報源です。

使用していたコードのスニペットをいくつかコピーします。役立つかもしれません。

object_id    = models.PositiveIntegerField(blank=True, null=True)
content_type = models.ForeignKey(ContentType, blank=True, null=True, verbose_name="Verweist auf")
of           = generic.GenericForeignKey('content_type', 'object_id' )

ではadmin、専用の関数を定義することでコンテンツ タイプを利用しています。

def get_queryset(self, request):
    qs = super(MyObjectAdmin, self).get_queryset(request)
    return qs.filter(content_type=None)
于 2013-11-05T11:09:58.510 に答える