У меня следующая структура сайта:
- Windows
- 98
- Subpage1
- Subpage2
- XP
- ....
- 7
- ....
- Mac
- 10.7
- Subpage1
- Subpage2
- 10.8
- ...
- 10.9
- Ubuntu
- 13.10
Каждая ОС — это приложение, и мне нужна дополнительная модель для каждого приложения, которая представляет собой перекрестную ссылку. Ссылка может вести на любую страницу.
Таким образом, псевдокод будет выглядеть так:
class Reference(models.Model):
title = models.CharField(_('title'), max_length=200)
links_to = models.ForeignKey(Windows | Mac | Ubuntu)
Я нашел сообщения об общем отношении, но не смог использовать решения для своей проблемы.
Ссылка на хороший, простой для понимания учебник или любую помощь была бы отличной.
Спасибо
Изменить:
Я подумал, что это может сработать. Но в этом примере я могу получить доступ только к одному свойству (slug), а не ко всему объекту:
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:
Большое спасибо за ваши ответы и потраченное время, но я собираюсь использовать feinCMS вместо djangoCMS. Это гораздо легче понять для меня и более подходит.