gpt4 book ai didi

django - 如何在管理内联中用实际对象的字段替换 content_type 和 object_id 字段?

转载 作者:行者123 更新时间:2023-12-05 06:41:35 25 4
gpt4 key购买 nike

我有内联,它显示了 contenttype 模型的数据,所以我看到的不是真实对象,而是 content_typeobject_id 字段。我可以排除这些字段 - 这不是问题,但我也想在下拉列表中使用另一个 Places 获得真实对象作为 selected .谁能告诉我,我该怎么做?

型号:

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

但是我如何将\add object_id 传递到这个表单\query 以便在下拉列表中获得“选定”位置?

最佳答案

找到解决方案。

将表单添加到 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

关于django - 如何在管理内联中用实际对象的字段替换 content_type 和 object_id 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40030559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com