2017-02-10 20 views
0

Когда я сериализую объект с помощью geojson, мне нужно будет добавить поле, содержащее обратный внешний ключ.Включите внешний ключ в сериализаторе Django GeoJSON

Я использую Django 1.9 и имеют следующие модели:

class NaturalEarthProvince(models.Model): 
    adm1_code = models.CharField(max_length=10, primary_key=True) 
    name = models.CharField(max_length=100) 
    geom = models.MultiPolygonField(srid=4326) 
    objects = models.GeoManager() 

class NaturalEarthMerged(models.Model): 
    basicname = models.CharField(max_length=200, blank=True) 
    fkprovince = models.OneToOneField(NaturalEarthProvince, blank=True, null=True) 
    fktouristicarea = models.ForeignKey(TouristicArea, blank=True, null=True, related_name='relatednatmerged', on_delete=models.SET_NULL) 

class TouristicArea(models.Model): 
    areaname = models.CharField(max_length=200, blank=True) 
    fkcountry = models.ForeignKey(NaturalEarthCountry, blank=True, null=True) 

То, что я хотел бы сделать это:

location = NaturalEarthProvince.objects.filter(adm0_a3=code) 
locationserialized = serialize('geojson', location, geometry_field='geom', fields=('name', 'adm1_cod_1', 'touristicarea') 

с touristicarea будучи location.naturalearthmerged.fktouristicarea

Любой ключ ?

ответ

0

Единственный способ мне удалось решить эту проблему, добавляя это конкретное поле вручную в JSon объекта:

locationserialized = serialize('geojson', location, geometry_field='geom', fields=('name', 'adm1_cod_1', 'adm0_a3')) 
resp_obj = json.loads(locationserialized) 
i = 0 
for eachobj in resp_obj['features']: 
    try: 
     resp_obj['features'][i]['properties']['touristicarea'] = NaturalEarthMerged.objects.filter(fkprovince__adm1_cod_1=eachobj['properties']['adm1_cod_1'])[0].fktouristicarea.id 
    except: 
     resp_obj['features'][i]['properties']['touristicarea'] = 0 
i = i+1 
return JsonResponse(resp_obj)