我尝试在Django管理面板中使用GeoModelAdmin作为StackedInline。
我看过这两个类似的问题:
- GeoDjango: Can I use OSMGeoAdmin in an Inline in the User Admin?
- django admin inlines with GeoModelAdmin
建议从 bothGeoModelAdmin
* 和 * 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
}
}
然后小部件看起来像这样:
但是我希望它看起来像这样:
- (注意右上角的控件,允许我修改几何体)*
1条答案
按热度按时间anauzrmj1#
应该有使用OSMWidget和这里是我如何使用以下解决方案:How do I add a custom inline admin widget in Django?
我的型号:
我的内联模型:
OSMWidget将模板覆盖到“gis/openlayers-osm.html”,其中发生以下基本层覆盖:
如果没有它,基本层代码看起来像这样(模板使用“gis/openlayers.html”):
你可以看到有不同的来源。