Я ищу правильный способ отображения поля карты с виджетом OSM по умолчанию в форме изменения администратора для пользователя только с has_view_permission () .
Я понимаю, что такого рода разрешение предоставит пользователям доступ только для чтения к моделям в админке. И все отображаемые поля будут полями только для чтения, так как по умолчанию has_change_permission () имеет значение False. И поскольку поведение Django по умолчанию требуется для геометрических полей в read_only_fields, данные будут отображаться в виде поля WKT.
Я попытался переопределить форму в соответствии с примечанием к выпуску django посоветовал :
# models.py
from django.contrib.gis.db import models
class Adress(models.ModelAdmin):
text_block = models.TextField(
"Full Adress", blank=True, null=True)
geom = models.PointField(
"Position WGS84", blank=True, null=True, geography=True)
# admin.py
from my_app.models import Adress
class AdressAdmin(geo_admin.OSMGeoAdmin):
modifiable = True
fieldsets = (
('My adress', {
'fields': (
'text_block',
)}),
('Position', {
'fields': (
'geom',
)}),
)
def get_form(self, request, obj=None, **kwargs):
if not self.has_change_permission(request, obj):
return AdressViewAdminForm
return super().get_form(request, obj, **kwargs)
admin.site.register(Adress, AdressAdmin)
# forms.py
class AdressViewAdminForm(forms.ModelForm):
class Meta:
model = models.Adress
fields = ('text_block', 'geom',)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
instance = kwargs.get('instance', None)
if instance and instance.geom:
self.fields.get('geom').widget.attrs['read_only'] = False
И присвоить атрибуту read_only для поля geom значение False. Но как только вызывается ModelAdmin.changeform_view (), к полям readonly будет добавлен 'geom' (CF: source ).
На данный момент единственный способ, которым я вижу, это принудительно вызвать has_change_permission () для пользователя только с has_view_permission () и определить все поля (кроме geom) как read_only_fields. И, наконец, не забывая скрыть кнопки «сохранить» из формы изменений.
Так есть ли прямой способ отобразить нередактируемое поле geom в виде карты в форме изменения сайта администратора для пользователя только с has_view_permission ()?
Спасибо за вашу помощь.