python - 如何在 DRF 序列化器中制作自定义字段?
问题描述
我有模型交易
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
方法执行此操作,但是对于所有请求类型,我都需要相同的东西。
解决方案
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)
推荐阅读
- angular - 将模板从子组件嵌入到父组件
- android - 如何从android kotlin中的另一个调用ViewModel方法?
- reactjs - 我应该在 powerapp 组件平台应用程序中的哪里插入 redux 提供程序标签?
- for-loop - Qlikview 加载中的循环
- azure - 错误:流式传输作业失败:流分析作业存在验证错误:当前不支持到端点的多个输入列
- api - Discord API:通过 OAuth2 隐式授权流程获取用户
- python - 在以顶点为中心的网格中绘制环
- php - 我们需要在 phpleague / oauth1-client php 库中放置哪些详细信息来代替标识符和秘密
- javascript - 如何使用引导模式使用 ejs 编辑数据
- php - Classipress (wordpress) 主页遇到问题