В GeoDjango используйте GeoModelAdmin как StackedInline в Django Admin
Я пытаюсь использовать GeoModelAdmin в качестве StackedInline в панели администратора Django.
Я видел эти два похожих вопроса:
- GeoDjango: Могу ли я использовать OSMGeoAdmin в инлайне в админке пользователя? .
- django admin inlines with GeoModelAdmin .
Ответ, рекомендующий наследовать от и GeoModelAdmin и StackedInline почти работает. Следующий код:
models.py:
class SomeGeometry(gis_models.Model):
geometry = gis_models.GeometryField(blank=False, null=False)
some_model = models.ForeignKey("somemodel", blank=False, null=False, on_delete=models.CASCADE, related_name="geometries")
class SomeModel(models.Model):
name = models.CharField(max_length=255)
admin.py:
class SomeGeometryAdminInline(gis_admin.GeoModelAdmin, admin.StackedInline):
model = SomeGeometry
extra = 0
fields = (
"geometry",
)
def __init__(self, parent_model, admin_site):
# InlineModelAdmin.__init__
self.admin_site = admin_site
self.parent_model = parent_model
self.opts = self.model._meta
self.has_registered_model = admin_site.is_registered(self.model)
# BaseModelAdmin.__init__
overrides = copy.deepcopy(FORMFIELD_FOR_DBFIELD_DEFAULTS)
for k, v in self.formfield_overrides.items():
overrides.setdefault(k, {}).update(v)
self.formfield_overrides = overrides
@admin.register(SomeModel)
class SomeModelAdmin(admin.ModelAdmin):
fields = ("name",)
inlines = (SomeGeometryAdminInline, )
Правильно показывает редактируемый виджет геометрии. Но нет ссылки "добавить другую модель" внизу инлайн-форсета.
Есть подсказки, как вернуть ссылку?
Если я явно устанавливаю
formfield_overrides = {
gis_fields.GeometryField: {
"widget": gis_widgets.OpenLayersWidget
}
}
Тогда виджет выглядит следующим образом:
Но я хочу, чтобы это выглядело так:
(обратите внимание на элементы управления в правом верхнем углу, позволяющие изменять геометрию)

