gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 18:16:40 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com