我正在使用JavaScript客户端编写在线游戏,我使用Django REST framework
作为后端。我为它写了一个任务系统。
我的任务对象是从django model QuestTemplate
动态创建的,它存储Quest desription和titel(每个用户都相同的部分)等信息;另一个model QuestHistory
我在其中提供了有关特定用户的任务状态的信息:因此它包含user
和completed
等字段。它们还有一些嵌套对象:Tasks和Rewards,它们以与Quest对象类似的方式创建。
我添加了一个纯python类Quest,它结合了这些模型的所有字段,然后我为这个类编写了一个Serializer。缺点是我必须在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)
答案 0 :(得分:1)
在ModelSerializer的Meta类中,据我所知,您只能指定一个Model。但是,有可能将自定义字段添加到序列化程序。在您的情况下,您可以尝试:
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的文档,以便更深入地了解。