gpt4 book ai didi

javascript - GeoDjango - 外键的传单显示弹出窗口

转载 作者:行者123 更新时间:2023-11-30 20:48:52 24 4
gpt4 key购买 nike

我正在尝试使用 Leaflet 在弹出窗口中显示用户名。现在,我只能将外键 id/pk 作为数字返回,但我想在弹出窗口中显示用户的真实姓名。 (模型中的名称字段在弹出窗口中正确显示)

这是一个简单的模型

class Reserve(gis_models.Model):
geom = gis_models.PolygonField()
objects = gis_models.GeoManager()
user = models.ForeignKey(User)
name = models.CharField(max_length = 240)

观看次数

def reserve_datasets(request):
reserve= serialize('geojson', Reserve.objects.all())
return HttpResponse(reserve, content_type='json')

html

<script type="text/javascript">

function our_layers(map,options){
var all_reserve_datasets = new L.GeoJSON.AJAX("{% url 'reserve_datasets'%}",{
onEachFeature: function(feature,layer){

layer.bindPopup('<h4> Name: '+feature.properties.name+'</h4><p>User: '+feature.properties.user);

},
});

all_applied_reserve.addTo(map);
}

</script>

{% leaflet_map "gis" callback="window.our_layers" %}

最佳答案

内置的 geojson 序列化器只能序列化模型字段。试试这个来序列化模型中的其他属性:

class BetterGeoJsonSerializer(Serializer):

def _init_options(self):
self.extra_attrs = self.options.pop('extra_attrs', ())
super()._init_options()

def get_dump_object(self, obj):
d = super().get_dump_object(obj)
for attr in self.extra_attrs:
v = obj
for s in attr.split("."):
v = getattr(v, s)
d[attr] = v
return d


def to_geojson(queryset, extra_attrs=(), **options):
s = BetterGeoJsonSerializer()
s.serialize(queryset, extra_attrs=extra_attrs, **options)
return s.getvalue()

# ...

def reserve_datasets(request):
extra = ('user.username',)
reserve= to_geojson(Reserve.objects.all(), extra)
return HttpResponse(reserve, content_type='application/json')

您还可以使用它来序列化属性:

class Reserve(models.Model):
geom = models.PolygonField()
user = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=240)

@property
def xxx(self):
return 12345

@property
def user_info(self):
return {'id': self.user.id, 'name': self.user.username, 'email': self.user.email}

在您的 View 中使用 extra = ('user_info', 'xxx')

对于复杂的序列化,考虑使用 Django REST Framework相反。

关于javascript - GeoDjango - 外键的传单显示弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48401096/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com