Django остальные рамки, трудности с пониманием сериализации полей внешнего ключа - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь узнать отношения в рамках Django rest и работе сериализатора в то время.

У меня есть следующая модель:

from django.db import models


class Point(models.Model):
    Latitude = models.FloatField(verbose_name="Latitude",
                                 blank=False)
    Longitude = models.FloatField(verbose_name="Longitude",
                                  blank=False)
    elevation = models.FloatField(verbose_name='Location Elevation',
                                  blank=False,
                                  default=1)


class Location(models.Model):
    location_name = models.TextField(unique=True, blank=False, verbose_name="Location Name")
    location_coordinates = models.ForeignKey(Point,
                                             on_delete=models.CASCADE,
                                             verbose_name='Latitude & Longitude')

    class Meta:
        unique_together = ['location_name', 'location_coordinates']
        get_latest_by = 'date_added'

    def __str__(self):
        return f'{self.location_name},{self.location_coordinates}'

И этот сериализатор :

from rest_framework import serializers

from .models import Location


class LocationSerializer(serializers.ModelSerializer):
    location_name = serializers.RelatedField(many=True, read_only=True)

    def to_representation(self, instance):
        representation = super().to_representation(instance)
        print(representation)
        return representation

    class Meta:
        model = Location
        fields = ['location_name']

Теперь я пытаюсь получить доступ к сериализованным данным, чтобы я мог запустить свои логи c и вернуть ответ в виде.

Документы платформы вид прыжка в глубокую воду в этом топи c (по крайней мере для меня)

Итак, у меня есть два вопроса:

  1. Как получить доступ к сериализованным данным в сериализаторе ?
  2. Где на нем можно запустить свою бизнес-логику c, которая возвращает обработанный файл фолиума HTML Файл, я предпочитаю делать это в сериализаторе, а не в представлении, поэтому он может быть возвращен при почтовый запрос, а не какой-то метод извлечения, что означает создание в сериализаторе нового поля, которое может быть возвращено пользователю.

Редактировать:

Я изменил свой сериализатор так:

class PointSerializer(serializers.ModelSerializer):
    class Meta:
        model = Point
        field = '__all__'


class LocationSerializer(serializers.ModelSerializer):
    # mission_file = serializers.PrimaryKeyRelatedField(many=True,read_only=True)

    class Meta:
        model = Location
        fields = ['location_name', 'location_coordinates']

Данные доступа следующие:

* 10 29 *

Как получить доступ к данным по location_coordinates, а не к их идентификатору.

1 Ответ

0 голосов
/ 05 апреля 2020

Вы можете просто использовать serializer.data для сериализации json:

>>> serialized_data = LocationSerializer(data,many=False)
>>> print(serialized_data)
LocationSerializer(<Location: yovel,Point object (1)>):
>>> serailizer.data

Для выполнения логики c на уровне сериализатора вы можете использовать SerializerMethodfield .

...