2014-07-23 86 views
1

我正在使用JavaScript客戶端編寫在線遊戲,並且我使用Django REST framework作爲後端。我已經爲它寫了一個任務系統。Django REST框架序列化模型組合

我的任務對象是從django model QuestTemplate動態創建的,其中存儲了諸如Quest desription和titel(每個用戶都相同的部分)等信息;另一個model QuestHistory,我把關於某個用戶的任務狀態的信息放在這裏:所以它有usercompleted等字段。他們也有一些嵌套的對象:任務和獎勵,這些都是以類似於Quest對象的方式創建的。

我添加了一個純Python類Quest,它結合了這些模型的所有字段,然後我爲這個類寫了一個Serializer。其缺點是,我必須在QuestSerializer

我已經看到了ModelSerializer你可以使用inner class Meta,你specifiy模型,並再次定義所有字段。是否還有一種方法可以用普通的python類來代替模型(使用我的Quest類)。 http://www.django-rest-framework.org/api-guide/serializers#specifying-nested-serialization

或者:

是否可以指定不止一個模型更在這個內部類,因此,它需要從我的model QuestTemplate和其他一些字段的字段從我model QuestHistory

(我也不知道這個結構是否有意義,在這裏問一下:django models and OOP design

回答

1

在ModelSerializer你的類可元,據我所知只能指定一個模型。但是有可能爲序列化程序添加自定義字段。你的情況,你也許可以嘗試:

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添加到班上元字段:

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

查看有關SerializerMethodField的文檔以獲得更深入的理解。

相關問題