2013-08-06 2 views
1

이 그것에 대해 여부를 갈 수있는 올바른 방법인지 나는 모르겠어요 나머지 프레임 워크에 문제가 있어요위한 특정 필드를 무시합니다. 나는 그래서 게시물 2 종류의 .. 이미지와 텍스트 포스트가 다음과 같은 모델장고 - 나머지는 특정 개체

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

에 대해 다음 시리얼 있습니다. 게시물에 이미지가 없으면 image 또는 image_url을 표시하고 싶지 않습니다.

나는 rest 프레임 워크를 만드는 방법을 알아낼 수 없다.

도움 주셔서 감사합니다!

+1

하나의 옵션은 두 개의 서로 다른 시리얼을 작성하는 것입니다. 뷰에서 get_serializer_class() 메서드를 재정 의하여 이미지가 있는지 여부에 따라 선택할 수 있습니다. –

+0

감사합니다 .. 나는 그 기능에 대해 몰랐다. 그래서 나는 그것을 살펴볼 것이다 – Mike

답변

3

그래, get_serializer_class() 메소드는 정말 쉽게 오버라이드 할 수 있습니다. 요청을받은 경우 특수 serializer에 사용하는 방법은 다음과 같습니다. 그냥 모델보기에서 던져.

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

나는 그것이 맞는 해결책이라고 생각하지 않는다. 그것은 객체를 기반으로 차별화하지 않고 단지 http 메소드입니다. 특히 이것은 목록 요청에는 작동하지 않습니다. – Mar0ux