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