1
中的Django模型實例,爲了使用不同的地圖專用窗體域(olwidget
),我重寫了模型窗體域(location
)。此MapField應包含一個圖層(InfoLayerField
),該圖層顯示所有其他模型實例,但是此刻正在編輯該模型實例。現在,它顯示全部模型實例(請參閱MyModel.objects.all()
),這意味着,如果編輯模型,當前位置顯示兩次。在我的一個管理窗體中訪問ModelForm的FormField定義
爲了做到這一點,我必須從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
...
感謝您的任何提示。