본문 바로가기
Python/REST Framework

[REST Framework] extra()를 사용한 AS serializer 필드 등록

by 혀나Lee 2016. 10. 10.

이 페이지는 Django, REST Framework의 Class based API인 ViewSet을 사용하는 것을 기반으로 설명하고 있습니다.



장고 모델에 있는 컬럼을 AS 를 이용하여 다른 변수를 추가하여 표현하고 싶을 때, 장고의 extra()를 사용하면 SQL의 AS로 치환된다.

SELECT SUBSTRING(da_date, 1, 4) AS year, da_date
FROM test_table;


위와 같이 da_date라는 컬럼의 값을 substring()을 이용하여 year라는 값을 추가하고 싶다. 이럴 경우, queryset의 extra()함수를 사용하면 된다.

views.py

TestTable.objects.all().extra(
    select={'year':'SUBSTRING(da_date, 1, 4)}
).values(
    'da_date', 'year'
)


serializers.py

class TestSerializer(serializers.ModelSerializer):
    year = serializers.CharField()
    
    class Meta:
        model = TestTable
        fields = ('da_date', 'year', )
        read_only_fields = ('year', )


TestSerializer 에 year 필드를 추가해 주고 class Meta의 fields에 year를 추가해준다.

TestSerizlier 의추가, 수정시에는 year가 사용되지 않을 것이기 때문에, read_only_fields에 추가해준다. (read_only=True로 표현해 줘도 된다.)


'Python > REST Framework' 카테고리의 다른 글

[Django-REST] Exception Handler  (0) 2016.10.19
[REST] Serializer fields  (0) 2016.10.11
[REST] Nested relationships  (0) 2016.10.11

댓글