在Django Admin中使用GenericTabularInline查找现有集合

时间:2015-10-07 13:32:14

标签: python django

在Django管理员中,我可以使用GenericTabularInline显示内联反向的通用关系。这有效....

  class Art(TimeDateStampedModel):
      collections = GenericRelation('apps.Collection')

admin.py

class CollectionsInline(GenericTabularInline):
    model = Collection

class ArtAdmin(admin.ModelAdmin):
    inlines = [
        CollectionsInline,
        MediaActivityInline,
    ]

但它只允许我添加新的集合或更新已经相关的集合。 如何从Collection搜索/选择或选择现有Art

我尝试在Art上使用GenericRelation,但它不起作用:

class ArtAdmin(admin.ModelAdmin):
    fieldsets = (
        ('', {
            'fields': ('collections'),
        }),

    )

1 个答案:

答案 0 :(得分:1)

您目前在Collection模型中拥有通用外键。听起来这不是你想要的,因为你希望能够将每个collection分配给多个外部对象。

你可以尝试创建一个模型,例如CollectionMember(不是一个好名字),带有收集的外键和通用外键。

class CollectionMember(models.Model):
    """
    Allows collections to be assigned to multiple external 
    objects using a generic foreign key
    """
    collection = models.ForeignKey(Collection)
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')

ArtAdmin中将CollectionMember添加为通用内联,然后您就可以为每个collection_member内联选择集合。