【问题标题】:How to make custom field in DRF Serializer?如何在 DRF 序列化器中制作自定义字段?
【发布时间】:2020-01-10 09:51:45
【问题描述】:

我有模型交易

class Transaction(models.Model):
    created_at = models.DateTimeField()

以及其他具有带有事务的 OneToOneField 的模型。

class RefillTransactionData(models.Model):
    transaction = models.OneToOneField(Transaction, on_delete=models.CASCADE)

class PurchaseTransactionData(models.Model):
    transaction = models.OneToOneField(Transaction, on_delete=models.CASCADE)

如何创建一个带有自定义字段“数据”的序列化器,该字段将包含其他序列化器?

一个Json shema应该是这样的

{
    created_at: "2020-10-01"
    data: {
        RefillTransactionData: {},
        PurchaseTransactionData: {}
    }
}

对于 GET 请求,我可以使用 to_representation 方法执行此操作,但所有请求类型都需要相同的东西。

【问题讨论】:

    标签: python django rest serialization django-rest-framework


    【解决方案1】:
    from rest_framework.fields import Field, SerializerMethodField
    
    class DictField(Field):
        """
        A field handle dict fields
        """
        type_name = 'dictfield'
    
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.style = {'base_template': 'textarea.html'}
    
        def to_representation(self, value):
            """" custom"""
            # do the customization according to u
            if isinstance(value, dict) or value is None:
                return value
    
        def to_internal_value(self, value):
            """ """
            # you can check and validate the data fromat
            if value == '' or value is None:
                return value
            pass
    
        def validate_empty_values(self, data):
            if data == '':
                self.fail('required')
            return super().validate_empty_values(data)
    
    

    【讨论】:

      猜你喜欢
      • 2017-02-04
      • 1970-01-01
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      相关资源
      最近更新 更多