Измените GeoModelAdmin по умолчанию на OSMGeoAdmin.

Я попытался наивно добавить его к 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")
    ]

И документация, которой я следую:


person Community    schedule 18.10.2017    source источник
comment
Аргумент widget для FieldPanel должен быть объектом или классом виджета, а не строковым путем — можете ли вы попробовать from django.contrib.gis.forms.widgets import OSMWidget, а затем FieldPanel('location', widget=OSMWidget)?   -  person gasman    schedule 18.10.2017


Ответы (1)


@gasman прав!

Если вы посмотрите документацию Django об указании виджетов вы увидите, что передается объект, а не строка:

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

content_panels = Page.content_panels + [FieldPanel('location', widget=OSMWidget),]
person John Moutafis    schedule 18.10.2017
comment
Спасибо. Я обновил код. Я не получаю ошибок, но виджет не меняется в админке. - person ; 18.10.2017
comment
Это не сработало, потому что ProjectMap был ParentalKey для ProjectPage. Если это не так, то это работает. - person ; 18.10.2017