python - Django REST框架序列化模型组合

标签 python django django-rest-framework

我正在使用 JavaScript 客户端编写在线游戏,我使用 Django REST framework对于后端。我为它编写了一个任务系统。

我的任务对象是从 django model QuestTemplate 动态创建的它存储诸如任务描述和标题之类的信息(每个用户都相同的部分);另一个model QuestHistory我在其中放置有关某个用户的任务状态的信息:因此它具有类似 user 的字段和completed 。它们还有一些嵌套对象:任务和奖励,它们的创建方式与任务对象类似。

我添加了一个纯Python类Quest,它结合了这些模型的所有字段,然后我为这个类编写了一个序列化器。缺点是我必须在 QuestSerializer 中再次定义所有字段。

我已经看到了ModelSerializer您可以使用 inner class Meta您在其中指定型号 和 。还有一种方法可以使用普通的 python 类而不是模型(使用我的 Quest 类)来执行此操作。 http://www.django-rest-framework.org/api-guide/serializers#specifying-nested-serialization

或者:

是否可以在这个内部类中指定多个模型,以便它从我的 model QuestTemplate 中获取字段以及我的 model QuestHistory 中的一些其他字段?

(我也不确定这个结构是否有意义,并在这里询问:django models and OOP design)

最佳答案

据我所知,在 ModelSerializer 的 Meta 类中,您只能指定一个模型。但是,可以将自定义字段添加到序列化器中。根据您的情况,您可以尝试:

custom_field = serializers.SerializerMethodField('some_method_in_your_serializer')

您应该将该方法添加到序列化器中,如下所示:

def some_method_in_your_serializer(self, obj):
    # here comes your logic to get fields from other models, probably some query
    return some_value # this is the value that comes into your custom_field

并将 custom_field 添加到类 Meta 中的字段:

class Meta:
    fields = ('custom_field', 'all_other_fields_you_need')

查看有关 SerializerMethodField 的文档以更深入地了解。

关于python - Django REST框架序列化模型组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24911203/

相关文章:

Django 休息框架 : is it possible to modify a Serializer class at runtime?

python - 用另一个字典中的值替换字典键

python - 默认参数在 python 中是如何工作的

python - 提取csv文件的多个多边形坐标

python - 更新内联表单集时出现 MultiValueDictKeyError

python - Django REST Framework ModelSerializer - 对象未保存

python - object() 不带参数

python - Django - 将用户包含在组中的问题

javascript - 如何在 javascript 文件中输入 json 文件的正确路径

Django url 在 nginx 代理后面带有 https