Пользовательский Сериализатор - PullRequest
1 голос
/ 08 июня 2019

Я хотел бы иметь конечную точку API, которая доставляет мне настроенные данные.Каждый раз, когда QR-код сканируется (также может быть одним и тем же QR-кодом несколько раз), создается новый набор данных корзины.

Моя цель - получить конечную точку API, которую я могу запросить, чтобы получить ответ JSON с QR-кодами, средство выбора, помеченное для него, и количество раз, когда этот QR-код сканировался.

Я знаю, как это сделать, используя обычные виды.Однако я бы предпочел использовать api rest-framework.

Я прочитал документацию rest-framwork (https://www.django -rest-framework.org / api-guide / Relations / # custom-relational-fields ) но чувствую себя немного потерянным.

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

class Picker(models.Model):
    class Meta:
        verbose_name_plural = 'Pickers'

    # First name of picker
    first_name = models.CharField(max_length=30)

    # Last name of picker
    last_name = models.CharField(max_length=30)

    def __str__(self):
        return f'{self.first_name} {self.last_name}'
class QRCode(models.Model):
    # Code
    code = models.CharField(max_length=250)

    def __str__(self):
        return f'{self.code}'
class Basket(models.Model):
    # DateTimestamp
    timestamp = models.DateTimeField(auto_now_add=True)

    # QR-Code scanned
    qr_code = models.CharField(max_length=30)

    # Picker from who the basket comes
    picker = models.ForeignKey(Picker, related_name='picker', on_delete=models.DO_NOTHING)

    def __str__(self):
        return f'{self.timestamp} - {self.qr_code}'

1 Ответ

0 голосов
/ 08 июня 2019

Если вы хотите сериализовать модель корзины и сериализовать ее внешний ключ, вы можете создать 2 сериализатора, 1 для модели корзины и один для модели сборщика, а в сериализаторе корзины вы получите доступ к сборщику корзины с помощью Поле метода сериализатора и возвращаем его сериализованным.

class PickerSerializer(serializers.ModelSerializer):
      class Meta:
          model = Picker
          fields = '__all__'

class BasketSerializer(serializers.ModelSerializer):
     picker = serializers.SerializerMethodField()

     class Meta:
          model = Basket
          fields = '__all__'

     def get_picker(self, obj):
         return PickerSerializer(obj.picker).data

Взгляните на поля сериализатора

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