Python 如何在DRF序列化程序中创建自定义字段?
我有模型交易Python 如何在DRF序列化程序中创建自定义字段?,python,django,rest,serialization,django-rest-framework,Python,Django,Rest,Serialization,Django Rest Framework,我有模型交易 class Transaction(models.Model): created_at = models.DateTimeField() 以及其他具有OneToOneField和TransasAction的车型 class RefillTransactionData(models.Model): transaction = models.OneToOneField(Transaction, on_delete=models.CASCADE) class Purc
class Transaction(models.Model):
created_at = models.DateTimeField()
以及其他具有OneToOneField和TransasAction的车型
class RefillTransactionData(models.Model):
transaction = models.OneToOneField(Transaction, on_delete=models.CASCADE)
class PurchaseTransactionData(models.Model):
transaction = models.OneToOneField(Transaction, on_delete=models.CASCADE)
如何创建具有自定义字段“data”的序列化程序,该字段将包含其他序列化程序
一个Json shema应该是这样的
{
created_at: "2020-10-01"
data: {
RefillTransactionData: {},
PurchaseTransactionData: {}
}
}
对于GET请求,我可以使用to_表示法
来实现,但对于所有请求类型,我都需要相同的东西
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)