我应该如何处理ManyToMany关系背后的GenericForeignKey的管理内联?

时间:2012-07-28 16:33:36

标签: django django-admin django-contenttypes

我有一个Django模型,可以有很多通用关系。这是通过手动创建结点模型来实现的:

class ContentProjectContentItem(models.Model):
    content_project = models.ForeignKey('ContentProject')

    # Generic relations via Content Type Framework
    object_id = models.PositiveIntegerField()
    content_type = models.ForeignKey(ContentType)
    item = generic.GenericForeignKey('content_type', 'object_id') 

    class Meta:
        unique_together = ('content_project', 'object_id', 'content_type')
        app_label = "cms"

通过ManyToManyField:

与父模型相关
class ContentProject(models.Model):
    title = models.CharField(max_length=100)
    date_created = models.DateTimeField(auto_now_add=True)

    # Related content (Assets, Resources, Media, etc)
    content_items = models.ManyToManyField(ContentProjectContentItem)

我仍在使用Django管理员开发我的技能,所以我不确定如何创建一个允许我向ContentProject添加多个ContentProjectContentItems的内联。我尝试过使用generic.GenericStackedInline,但无济于事:

class ContentItemInline(generic.GenericStackedInline):
    name = "content_project"
    model = ContentProjectContentItem 

class ContentProjectAdmin(MPTTModelAdmin):
    list_display = ('title' , 'date_created')
    search_fields = ('title' , 'date_created')

    inlines = [
        ContentItemInline,
    ]

我只是看到content_items的标准ManyToMany多选(这是我所期望的)。我不确定如何让ContentProjectAdmin知道联结表的通用关系。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我最终实现了一个自定义的change_view模板来手动添加表单元素,并覆盖了表单保存方法来处理这个用例。

不是最漂亮的解决方案,但仍然有效。