【问题标题】:How to replace content_type and object_id fields by a field with actual object in admin inline?如何用管理员内联中的实际对象字段替换 content_type 和 object_id 字段?
【发布时间】:2016-10-13 20:40:03
【问题描述】:

我有内联,它显示contenttype 模型的数据,所以我看到的是content_typeobject_id 字段而不是真实对象。我可以exclude 这些字段 - 这不是问题,但我也想在下拉列表中将真实对象作为selected 和另一个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 CriteriaPlacesInlineAdmin(admin.TabularInline):
    model = PlacesToCriterias

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

admin.site.register(Criterias, CriteriasAdmin)

我可以添加到CriteriaPlacesInlineAdmin 一个form,类似:

class CriteriaPlacesChoicesFieldForm(forms.ModelForm):
    places = forms.ModelChoiceField(PlaceTypesGroups.objects.all(), label='place')

但我怎样才能将object_id 传递到此表单\查询,以便在下拉列表中获得“选定”位置?

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    找到解决方案。

    将表单添加到admin.TabularInline:

    class CriteriaPlacesInlineAdmin(admin.TabularInline):
        model = PlacesToCriterias
        form = CriteriaPlacesChoicesFieldForm  # <- ADDED FORM
    
    class CriteriasAdmin(admin.ModelAdmin):
        inlines = [CriteriaPlacesInlineAdmin]
    
    admin.site.register(Criterias, CriteriasAdmin)
    

    表格:

    class CriteriaPlacesChoicesFieldForm(forms.ModelForm):
        ct_place_type = ContentType.objects.get_for_model(PlaceTypesGroups)
    
        object_id = forms.ModelChoiceField(PlaceTypesGroups.objects.all(), label='places')
        content_type = forms.ModelChoiceField(ContentType.objects.all(), initial=ct_place_type, widget=forms.HiddenInput())
    
        def clean_object_id(self):
            return self.cleaned_data['object_id'].pk
    
        def clean_content_type(self):
            return self.ct_place_type
    

    【讨论】:

    • PlaceTypesGroups 在您的示例中引用了什么?
    猜你喜欢
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 2016-08-26
    • 2011-12-24
    • 1970-01-01
    • 2017-08-14
    相关资源
    最近更新 更多