в одной из моих форм администратора я переопределяю поле формы модели (location
), чтобы использовать другое поле формы, специфичное для карты (olwidget
). Этот MapField должен включать слой (InfoLayerField
), который отображает все другие экземпляры модели, кроме того, который редактируется в данный момент. Прямо сейчас отображается все экземпляров модели (см. MyModel.objects.all()
), что означает, что при редактировании модели текущее местоположение отображается дважды.
Чтобы достичь этого, я должен исключить текущий отредактированный экземпляр модели из QuerySet, используемого в InfoLayerField
(что-то вроде MyModel.objects.exclude(pk=self.instance.pk)
). Но так как поля формы определены как статические переменные, я не могу получить доступ к self.instance
.
Есть ли способ достичь этого?
# models.py
class MyModel(models.Model):
name = models.CharField(max_length=200)
location = models.PointField(blank=True, null=True)
# admin.py
from olwidget.fields import MapField, EditableLayerField, InfoLayerField
from olwidget.utils import get_ewkt
class MyModelAdminForm(forms.ModelForm):
class Meta:
model = MyModel
location = MapField([
EditableLayerField({
'geometry': 'point',
'name': 'location',
}),
InfoLayerField(
[(get_ewkt(m.location), m.name) for m in MyModel.objects.all() if m.location ], {
'geometry': 'point',
'name': 'other locations',
'cluster': True,
'cluster_display': 'list',
}
)
])
class MyModelOlwidgetAdmin(admin.ModelAdmin, GeoModelAdmin):
form = MyModelAdminForm
...
Спасибо за любую подсказку.