Как заменить поля content_type и object_id полем с реальным объектом в админ-инлайн?
У меня есть встроенный, который показывает данные contenttype
модель, поэтому вместо реальных объектов я вижу content_type
а также object_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
в эту форму \ запрос, чтобы получить "выбранное" место в выпадающем списке?
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