django-rest忽略某些对象的某些字段

时间:2013-08-06 13:45:31

标签: django django-rest-framework

我遇到了休息框架的问题我甚至不确定这是否是正确的方法。我有以下型号

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()

以下用于rest-framework的序列化程序

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 个答案:

答案 0 :(得分:3)

是的,get_serializer_class()方法很容易覆盖。这是我如何使用它作为特殊的序列化程序,如果它是一个get请求。只需将其放入模型视图中即可。

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