django - ForeignKey 的序列化程序上的动态字段
问题描述
我设置了一个序列化程序,它能够动态序列化 Django Rest Framework 文档中指定的所需字段。
class DynamicFieldsModelSerializer(serializers.ModelSerializer):
"""
A ModelSerializer that takes an additional `fields` argument that
controls which fields should be displayed.
"""
def __init__(self, *args, **kwargs):
# Don't pass the 'fields' arg up to the superclass
fields = kwargs.pop('fields', None)
# Instantiate the superclass normally
super(DynamicFieldsModelSerializer, self).__init__(*args, **kwargs)
if fields is not None:
# Drop any fields that are not specified in the `fields` argument.
allowed = set(fields)
existing = set(self.fields)
for field_name in existing - allowed:
self.fields.pop(field_name)
>>> class UserSerializer(DynamicFieldsModelSerializer):
>>> class Meta:
>>> model = User
>>> fields = ['id', 'username', 'email']
>>>
>>> print(UserSerializer(user))
{'id': 2, 'username': 'jonwatts', 'email': 'jon@example.com'}
>>>
>>> print(UserSerializer(user, fields=('id', 'email')))
{'id': 2, 'email': 'jon@example.com'}
然后,我将如何添加与 ForeignKey 相关的模型并动态序列化该模型中的所需字段?
我们可以制作模型
class User(models.Model):
id = IntegerField()
username = CharField()
email = EmailField()
class Vehicle(models.Model):
color = CharField()
type = CharField
year = DateField()
driver = ForeignKey(User)
然后基于视图包括颜色、类型、年份或这些的任何组合。
我想要这样的东西。
{
'id': 27,
'username': 'testuser',
'vehicle: {
'color': 'Blue',
'type': 'Truck',
}
}
解决方案
如果你想要一个嵌套的字典,你可以简单地做
class VehicleSeralizer(serialzers.ModelSerializer):
class Meta:
model = Vehicle
fields = '__all__'
class UserSerializer(seralizers.ModelSerializer):
vehicle = VehicleSerializer()
class Meta:
model = User
fields = ['id', 'username', 'email'] # you might need to add 'vehicle'
推荐阅读
- php - 无法使用php将三个变量传递到url中的另一个页面
- java - 如何在 Android (NDK r20) 上修复 (process_begin: CreateProcess(NULL, "", ...) failed.)?
- swift - 隐藏顶部消息的出现键盘
- php - 我想在 php 中使用 RewriteRule 更改 url
- android - 使用 TextInputLayout 和 TextInputEditText 时删除额外的空间/填充/边距
- javascript - 函数调用其他函数练习我很难过
- windows - 在 Oracle 数据库上调度 SQL 脚本的 PowerShell 脚本面临问题
- sql-server - 为没有任何对应值的组生成记录
- python - 多维数组的递归矩阵元素加法
- git-detached-head - 恢复 git 分离的头部提交