python - Django:交叉引用

标签 python django django-cms

我有以下网站结构:

- 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)

我找到了关于通用关系的 View 帖子,但我无法使用解决方案来解决我的问题。

一个好的、易于理解的教程或任何帮助的链接会很棒。

谢谢

编辑:

我认为这可能有效。但是在这个例子中我只能访问一个属性(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。这对我来说更容易理解,也更合适。

最佳答案

内容类型方法似乎很合适。 django docs on generic relations是一个很好的来源。

我复制了一些我正在使用的代码片段,也许它们有帮助:

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)

关于python - Django:交叉引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19704759/

相关文章:

Django:如何从用户 id 中获取用户全名

python - 如何在 LXLE 上使用 Apache 和 mod_wsgi 为 Django 应用程序提供服务

python - 知道为什么我会收到此错误吗?

Django:有没有 django 博客或 cms 引擎具有所有 wordpress 功能?

python - from x import y 和 import x.y 之间的区别

python - 类不能使用 mypy 子类化 'QObject'(类型为 'Any')

python - 如何在python中同时运行两个同步进程

python - 我的素性测试忽略了一个条件。我究竟做错了什么?

django - 使用 ListView 显示分页结果的最后一页而不是 404

django - 如何将自定义模板页面添加到夹层?