【问题标题】:Django REST framework serializing model combinationsDjango REST框架序列化模型组合
【发布时间】:2014-07-23 13:01:11
【问题描述】:

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

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

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    据我所知,在 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 的文档以深入了解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-07
      • 2012-11-16
      • 1970-01-01
      • 2014-07-26
      • 2017-06-25
      • 2013-03-31
      • 2018-06-18
      • 2015-06-29
      相关资源
      最近更新 更多