모델 직렬 변환기에 정적 필드를 포함 할 수 있습니까? 내 모든 위치를 볼 수 있습니다DRF : 시리얼 라이저의 정적/읽기 전용/비 모델 필드?
class LocationSerialiser(serializers.ModelSerializer):
class Meta:
model = Location
fields = ("id", "long", "lat")
간단한 ListAPIView
와 :
class Location(models.Model):
long = models.FloatField(...)
lat = models.FloatField(...)
과 시리얼 예를 들어, 나는 모델이
{
'id': 1,
'long': ...,
'lat': ...,
},
...
을하지만 난이하고 싶은 말은 내 json 응답의 모든 객체에 정적, 비 모델 필드가 추가 되었습니까? 다음과 같이 입력하십시오 :
{
'id': 1,
'long': ...,
'lat': ...,
'display': True,
'icon': 'image/marker.png'
},
...
어떻게 이것을 시리얼 라이저에 추가 할 수 있습니까? fields
모듈 (2.2.4)을 살펴 봤지만이를 달성 할 명확한 방법은 없습니다. 모든 항목에는 source
속성이 필요합니다.
class Location(models.Model):
long = models.FloatField(...)
lat = models.FloatField(...)
@property
def show(self):
return True
...
:
이상적으로 나는 내가 찾은
class LocationSerialiser(serializers.ModelSerializer):
display = fields.BooleanField(value=True)
icon = fields.CharField(value="image/marker.png")
class Meta:
model = Location
fields = ("id", "long", "lat")
편집
한 가지 방법을하고자하는 것은 단순히 모델 인스턴스에 추가 @property
포장 방법을 넣어하는 것입니다
그리고 나서 직렬화에서 r :
class LocationSerialiser(serializers.ModelSerializer):
display = fields.BooleanField(value=True)
icon = fields.CharField(value="image/marker.png")
show = fields.CharField(source="show")
class Meta:
model = Location
fields = ("id", "long", "lat")
하지만 이것은 매우 해킹 된 것 같습니다. 이것을 달성하는 더 깨끗한 방법이 있어야합니까?
아, 첫 번째 방법은 알아 냈지만 두 번째 방법은 훨씬 더 의미가 있습니다. 나는 그것을 놓쳤다. [문서에] (http://www.django-rest-framework.org/api-guide/fields#serializermethodfield). –