Как указать, какое значение возвращается для стороннего поля при сериализации данных в представлении в Django - PullRequest
2 голосов
/ 29 апреля 2019

У меня есть модель, содержащая ForeignKey для другой модели.Я пытаюсь сериализовать эту модель и хочу контролировать, какое поле возвращается для поля Foreignkey.См. Ниже:

models.py

class Surveyor(models.Model):
    num = models.CharField(max_length=3)
    name = models.CharField(max_length=250)

class Anblsrecord(models.Model):
    ...
    sur_num = models.ForeignKey(Surveyor, on_delete=models.CASCADE)

views.py

def anbls_points(request):
    points_as_geojson = serialize('geojson', Anblsrecord.objects.all()[:5], fields=(... 'sur_num'))
    return JsonResponse(json.loads(points_as_geojson))

Когда я вижу это, я получаю: ... "sur_num": 1 ... где "1" это "num" из класса Surveyor.Я хочу вернуть «имя».

Я посмотрел на https://docs.djangoproject.com/en/2.2/topics/serialization/, в котором говорится о наследовании нескольких таблиц, но я не могу найти ничего для связанной таблицы.

Любойпомощь будет принята с благодарностью.

1 Ответ

1 голос
/ 30 апреля 2019

Сериализаторы Django Rest Framework с django-rest-framework-gis работают:

serializers.py

from anblsrecords import models
from rest_framework_gis.serializers import GeoFeatureModelSerializer
class AnblsrecordSerializer(GeoFeatureModelSerializer):
    sur_name = serializers.CharField(source='sur_num.name')
    class Meta:        
        model = models.Anblsrecord
        geo_field = "geom"
        fields = (
            ...
            'sur_name',        
        )

views.py

from rest_framework import generics
class ListAnbls_points(generics.ListCreateAPIView):
    queryset = Anblsrecord.objects.all()[:5]
    serializer_class = serializers.AnblsrecordSerializer

Возвращает: "properties": {..., "sur_name": "Name Surveyor", ...} и включает геометрический элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...