我想序列化一个模型,但希望包含一个额外的字段,该字段需要对要序列化的模型实例进行一些数据库查找:
class FooSerializer(serializers.ModelSerializer):
my_field = ... # result of some database queries on the input Foo object
class Meta:
model = Foo
fields = ('id', 'name', 'myfield')
做这件事的正确方法是什么?我看到你可以传递额外的“上下文”到序列化器,正确的答案是在上下文字典中传递额外的字段吗?
使用这种方法,获取所需字段的逻辑将不是序列化程序定义自包含的,这是理想的,因为每个序列化实例都需要my_field
。在DRF序列化器文档的其他地方,它说“额外的字段可以对应于模型上的任何属性或可调用的”。额外的领域是我说的吗?
我是否应该在foo
的模型定义中定义一个返回my_field
值的函数,并在序列化程序中将my_field挂接到那个可调用的函数?那看起来像什么?
如果有必要,乐意澄清问题。
我认为SerializerMethodField就是您要寻找的:
class FooSerializer(serializers.ModelSerializer):
my_field = serializers.SerializerMethodField('is_named_bar')
def is_named_bar(self, foo):
return foo.name == "bar"
class Meta:
model = Foo
fields = ('id', 'name', 'my_field')
http://www.django-rest-framework.org/api-guide/fields/#serializermethodfield
问题内容: 我想序列化一个模型,但想包含一个附加字段,该字段要求在要序列化的模型实例上进行一些数据库查找: 什么是正确的方法?我看到你可以将额外的“上下文”传递给序列化程序,是在上下文字典中传递附加字段的正确答案吗?使用这种方法,获取我需要的字段的逻辑不会与序列化程序定义完全独立,这是理想的,因为每个序列化的实例都需要。在DRF序列化器文档的其他地方,它表示 “额外字段可以对应于模型上的任何属性或
当我要求一个图像http://127.0.0.1:8000/api/images/1/或者传入参数进行裁剪http://127.0.0.1:8000/api/images/1/?height=320 我得到的答复是: 而在http://127.0.0.1:8000/api/images/ 答复是: 为什么缩略图不容易返回主机名,我如何将基本网址追加到响应中? 以下是我的看法。派克
问题内容: 我正在运行一个基于Java Spring MVC的Web应用程序。它还基于Hybris平台。 现在,已经实现了有关身份验证和授权的基本功能。意味着我们确实有用于会话,有效的用户系统等的过滤器。 但是,我们目前还没有针对诸如XSS和其他可能的攻击之类的安全措施。XSS可能是最大的问题,因为它是最常见的攻击方式。 现在,我不知道……明智地采取什么步骤?我环顾四周,我发现存在像XSS-Fil
有一个用户集合
你能帮我解决这个问题吗? 我在类<code>单元格</code>中创建按钮,并向该按钮添加一些默认操作。 在< code>Game类中,我想给这个按钮添加额外的动作,但我也想保留默认动作。 我知道新操作覆盖了以前的操作。因此,如果我单击按钮,它只会打印。 是否可以向按钮添加新操作并保留以前的连接?
在我的ModelViewSet中,我试图排除我的租户字段,以防止用户看到租户id(来自django-simic-Multitenant)。但是,我不能开发通用的ModelSerializer,因为我总是需要在ModelSerializer类中定义模型Meta。我的源代码,工作(非通用)如下。我想实现以下任一选项: > 序列化器的工作原理是拾取实际的类模型,而不需要在序列化器的元类中指定模型 在默认