2013-08-06 113 views
1

我遇到了rest-framework的問題我甚至不確定這是否是正確的方式。我有以下型號django-rest忽略某些對象的某些字段

class Post(models.Model): 
    user = models.ForeignKey(User) 

    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 
    date = models.DateTimeField(auto_now=True) 

    show = models.BooleanField(default=True) 

    title = models.CharField(max_length=100, blank=True, null=True) 
    body = models.TextField(null=True, blank=True) 
    role = models.IntegerField(max_length=1, choices=POST_OPTIONS, default=1) 
    image = models.ImageField(upload_to="photos", blank=True, null=True) 
    s3Url = models.URLField(blank=True, null=True) 
    tags = TaggableManager() 

而對於其餘部分的框架

class PostSerializer(serializers.HyperlinkedModelSerializer): 
    image_url = serializers.Field(source='get_imgage_url') 
    image_file = serializers.ImageField() 
    role = serializers.Field(source='get_role') 

    class Meta: 
     model = Post 

     fields = ('url', 'user', 'created', 'updated', 'date', 'show', 'title', 'body', 'role', 'image_url', 'image') 
     read_only_fields = ('user', 'created', 'updated') 

以下串行所以有2種職位..一個圖像和文本後。如果帖子中沒有圖像,我不想顯示圖像或image_url。

我無法弄清楚如何使rest-framework做到這一點。

感謝您的幫助!

+1

一種選擇是編寫兩個不同的串行器。在你的視圖中,你可以重寫get_serializer_class()方法來根據是否有圖像進行選擇。 –

+0

謝謝..我不知道這個功能,所以我會看看它 – Mike

回答

3

是的,get_serializer_class()方法很容易覆蓋。以下是我如何使用它作爲特殊的串行器,如果它是一個獲取請求。把它扔進模型視圖。

def get_serializer_class(self): 
    if self.request.method == "GET": 
     return ProductGetSerializer 
    return ProductSerializer 
+1

我不認爲這是正確的解決方案。它不區分基於對象,只是http方法。具體來說,這對列表請求不起作用。 – Mar0ux