自定义序列化器

时间:2019-06-08 12:01:43

标签: python django django-rest-framework

我希望有一个API端点可以为我提供自定义数据。每次扫描QR码(多次也可能是同一QR码)时,都会创建一个新的购物篮数据集。

我的目标是拥有一个API终结点,我可以查询该API终结点,以获取带有QR码的JSON响应,对其进行标记的选择器以及已扫描特定QR码的次数。

我知道如何使用普通视图进行操作。但是,我更喜欢使用rest-framework api。

我已阅读完其余框架的文档(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 :(得分:0)

如果您也要序列化篮子模型并将其外键序列化,则可以创建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

看看serializer fields