Описание проблемы
Хорошо, я пытаюсь добавить функцию, определенную внутри модели (называемой Шоссе), к HttpResponse модели (Шоссе) после сериализации с сериализатором geojson без успеха.
Я пытаюсь найти решение, просматривая исходный код, так как ошибки не передаются, и свойство не отображается в HttpResponse.Однако я мог бы усложнить вещи и, надеюсь, еще раз взглянуть на это.Я открыт для других предложений, возможно, для обновления Шоссе каждый раз, когда местоположение добавляется / изменяется.
Элемент отображается правильно при передаче его на сайт администратора, и все другие поля (не показаны ниже) работают какпредназначен.
PS.Я совершенно новичок во всей системе Django.Спасибо!
Версия Django: 2.1
Соответствующие ссылки:
- https://docs.djangoproject.com/en/2.1/ref/contrib/gis/serializers/
- https://github.com/django/django/blob/master/django/contrib/gis/serializers/geojson.py
Сокращенный код
geom.models.py
class Highway(models.Model):
name = models.CharField(max_length=50, unique=True)
length = models.IntegerField("Length in meters")
mline = models.MultiLineStringField("Geometry", srid=4326)
def cameras_per_km(self):
#THIS IS THE FUNCTION I AM TRYING TO SEND TO GEOJSON SERIALIZER
count = self.location_set.filter(location__icontains="camera").count()
return round(count/(self.length/1000),1)
cameras_per_km.short_description = "Cameras/km"
class Location(models.Model):
location = models.CharField(max_length=30, unique=True)
highway = models.ForeignKey(Highway, null=True, on_delete=models.SET_NULL)
point = models.PointField()
geom.admin.py (при передаче функции вlist_display элемент выглядит корректно в админ)
class HighwayAdmin(LeafletGeoAdmin):
list_display = ('name', 'cameras_per_km')
admin.site.register(
Highway,
HighwayAdmin,
)
geom.views.py (это не так)
def geojson_highway_all(request):
geojsonformat = serialize('geojson',
Highway.objects.all(),
geometry_field='mline',
fields = (
'pk',
'cameras_per_km' # <-- I want this to show
)
)
return HttpResponse(geojsonformat)
geom.urls.py
from django.urls import path
from . import views
app_name = 'geom'
urlpatterns = [
path('highways.geojson', views.geojson_highway_all, name='highways.geojson'),
]