2016-01-17 23 views
1

我需要實現一個功能,在寫郵件時需要提交帳戶的ID,並閱讀帖子閱讀帳戶的其他信息。我如何用深度數據寫入數據,但讀取數據的深度更大?如何在Django Rest Framework中寫入flat和從ModelSerializer嵌套讀取?

ModelSerializers:

class PostSerializer(serializers.ModelSerializer): 
    author = UserSerializer(required=False, allow_null=True) 
    class Meta: 
     model = Post 
     fields = ('id', 'author', 'message', 'rating', 'create_date', 'close_date',) 

class UserSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = User 
     fields = ('id', 'username', 'full_name',) 
+0

你能發表你曾經嘗試過嗎? – bryanph

+0

我已更新模型串行器。 –

回答

0

當我得到你想要你的一些領域進行只讀,例如,你需要「CREATE_DATE」被讀出,但不能寫入

這是我的方法:

models.py

# This extra modification done as late comments 
class Post(models.Model): 
    ... 
    def username(self): 
    return self.author.username 

    def full_name(self): 
    return self.author.full_name 

Serializer.py

class PostSerializer(serializers.ModelSerializer): 
    # author = UserSerializer(required=False, allow_null=True) # Don't define this 
    create_date_read_only = serializers.DateTimeField(required = False, read_only = True, source = 'create_date') 
    class Meta: 
     model = Post 
     # username, full_name added to fileds tuple 
     fields = ('id', 'author', 'username','full_name','message', 'rating', 'create_date_read_only', 'close_date',) 

執行相同的其他只讀的Fileds

+0

我後來提到了read_only_fields數組指定create_date和其他字段,它的工作。我現在只需要讀取PostSerializer中使用的UserSerializer中的full_name和username,但它不適用於嵌套序列化器。 –

+0

您是否在Post模型中將作者聲明爲ForeignKey? – Serjik

+0

是的..我已經使用作者作爲用戶模型的外鍵 –

0

您的使用SerializerMethodField這一點。

您不必修改模型。你的序列化器看起來像這樣:

class PostSerializer(serializers.ModelSerializer): 
    my_username = serializers.SerializerMethodField() 

    class Meta: 
     model = Post 
     fields = ('id', 'author', 'my_field'...) 

    def get_my_username(self, obj): 
     return obj.user.author.username 
+0

這錯過了問題的「寫平」部分,這隻讀平面版本。 –

相關問題