【问题标题】:Change default GeoModelAdmin to OSMGeoAdmin将默认 GeoModelAdmin 更改为 OSMGeoAdmin
【发布时间】:2017-10-18 07:23:32
【问题描述】:

我试着像往常一样天真地将它添加到admin.py

from django.contrib.gis import admin 
from project.models import ProjectMap

admin.site.register(ProjectMap, admin.OSMGeoAdmin)

我尝试指定小部件:

content_panels = Page.content_panels + [ 
    FieldPanel('location', widget='django.contrib.gis.forms.widgets.OSMWidget'),
]

但它仍然显示来自 GeoModelAdmin 的默认卫星图像。

这是我正在使用的基本模型。

class ProjectPage(Page):
    date = models.DateField("Post date", null=True)
    body = RichTextField(blank=True)

    def main_image(self):
        gallery_item = self.gallery_images.first()
        if gallery_item:
            return gallery_item.image
        else:
            return None

    search_fields = Page.search_fields + [
        index.SearchField('body'),
    ]

    content_panels = Page.content_panels + [
        MultiFieldPanel([
            FieldPanel('date'),
        ], heading="Project information"),
        MultiFieldPanel([
            FieldPanel('body', classname="full"),
        ], heading='Project'),
        InlinePanel('gallery_images', label="Gallery images"),
        InlinePanel('project_map', label="Project location")
    ]


class ProjectMap(Orderable):
    page = ParentalKey(ProjectPage, related_name='project_map')
    city = models.CharField(blank=True, max_length=250)
    address = models.CharField(blank=True, max_length=250)
    country = models.CharField(blank=True, max_length=250)
    location = PointField(blank=True, null=True)

    content_panels = Page.content_panels + [
        MultiFieldPanel([
            FieldPanel('city'),
            FieldPanel('address'),
            FieldPanel('country'),
            FieldPanel('location'),
        ], heading="Location")
    ]

以及我正在关注的文档:

【问题讨论】:

  • FieldPanel 上的 widget 参数需要是一个小部件对象或类,而不是字符串路径 - 你可以先试试 from django.contrib.gis.forms.widgets import OSMWidget 然后FieldPanel('location', widget=OSMWidget) 吗?

标签: django geodjango wagtail


【解决方案1】:

@gasman 是正确的!

如果您查看有关 specifying widgets 的 Django 文档,您会看到传递的是对象而不是字符串:

from django.contrib.gis.forms.widgets import OSMWidget

content_panels = Page.content_panels + [FieldPanel('location', widget=OSMWidget),]

【讨论】:

  • 谢谢。我已经更新了代码。我没有收到任何错误,但小部件在管理员中没有更改。
  • 它不起作用,因为 ProjectMap 是 ProjectPage 的 ParentalKey。如果不是这种情况,它可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 2014-05-16
  • 2017-08-11
  • 2017-08-26
相关资源
最近更新 更多