如何使用GenericTabularInline通过反向关系在admin中添加\ get数据?

时间:2016-10-13 16:03:21

标签: django django-admin django-contenttypes

我可以将Criterias添加到某个地方。如何将Places添加到条件中?

型号:

class Criterias(models.Model):
    name = ...

class Places(models.Model):
    name = ...

class PlacesToCriterias(models.Model):
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey()

    criteria_group = models.ForeignKey(Criterias)

管理员 - 地点部分:

class PlaceCriteriasInlineAdmin(GenericTabularInline):
    model = PlacesToCriterias

class PlacesAdmin(admin.ModelAdmin):
    inlines = [PlaceCriteriasInlineAdmin]

admin.site.register(Places, PlacesAdmin)

在这种情况下,当我打开Places管理员更改页面时,我可以将Criterias项添加到我的地点'。

管理员 - CRITERIAS部分:

class CriteriaPlacesInlineAdmin(GenericTabularInline):
    model = PlacesToCriterias

class CriteriasAdmin(admin.ModelAdmin):
    inlines = [CriteriaPlacesInlineAdmin]

admin.site.register(Criterias, CriteriasAdmin)

在这种情况下,当我打开Criterias管理员更改页面时,我无法将Places项添加到我的标准',因为而不是places我见criterias

如何在Places管理页面获取Criterias个项目?

1 个答案:

答案 0 :(得分:0)

这很容易。 GenericTabularInline必须更改为admin.TabularInline

class CriteriaPlacesInlineAdmin(admin.TabularInline):
    model = PlacesToCriterias

class CriteriasAdmin(admin.ModelAdmin):
    inlines = [CriteriaPlacesInlineAdmin]

admin.site.register(Criterias, CriteriasAdmin)

如果有人需要获取包含所选对象的下拉列表,而不是content_typeobject_id字段,则解决方案为here