[PYTHON] 장고 Rest 프레임 워크 - ModelSerializer에서 사용자 정의 필드를 추가하는 방법
PYTHON장고 Rest 프레임 워크 - ModelSerializer에서 사용자 정의 필드를 추가하는 방법
ModelSerializer를 만들고 내 모델의 일부가 아닌 사용자 정의 필드를 추가하려고합니다.
여기에 추가 필드를 추가하는 설명을 발견하고 다음을 시도했습니다.
customField = CharField(source='my_field')
이 필드를 추가하고 validate () 함수를 호출하면이 필드는 attr dict의 일부가 아닙니다. attr은 추가 필드를 제외하고 지정된 모든 모델 필드를 포함합니다. 그래서 내가 덮어 쓰기 검증에서이 필드에 액세스 할 수 없습니까?
이 필드를 다음과 같이 필드 목록에 추가하면 :
class Meta:
model = Account
fields = ('myfield1', 'myfield2', 'customField')
customField가 내 모델의 일부가 아니기 때문에 오류가 발생합니다.이 serializer에만 추가하기 때문에 올바른 것입니다.
사용자 정의 필드를 추가 할 수있는 방법이 있습니까?
해결법
-
==============================
1.CharField (및 다른 입력 된 필드)가 쓰기 가능한 필드를위한 경우를 제외하고는 올바른 일을 수행하고 있습니다.
CharField (및 다른 입력 된 필드)가 쓰기 가능한 필드를위한 경우를 제외하고는 올바른 일을 수행하고 있습니다.
이 경우 간단한 읽기 전용 필드가 필요하므로 대신 다음을 사용하십시오.
customField = Field(source='get_absolute_url')
-
==============================
2.실제로 모든 모델을 만지지 않고도 해결책이 있습니다. SerializerMethodField를 사용하면 모든 메서드를 serializer에 연결할 수 있습니다.
실제로 모든 모델을 만지지 않고도 해결책이 있습니다. SerializerMethodField를 사용하면 모든 메서드를 serializer에 연결할 수 있습니다.
class FooSerializer(ModelSerializer): foo = serializers.SerializerMethodField() def get_foo(self, obj): return "Foo id: %i" % obj.pk
-
==============================
3.... 모델 메서드가 다음과 같이 정의 된 경우 명확성을 위해 :
... 모델 메서드가 다음과 같이 정의 된 경우 명확성을 위해 :
class MyModel(models.Model): ... def model_method(self): return "some_calculated_result"
이 메소드를 호출 한 결과를 serializer에 다음과 같이 추가 할 수 있습니다.
class MyModelSerializer(serializers.ModelSerializer): model_method_field = serializers.CharField(source='model_method')
추신. 맞춤 입력란은 실제로 모델의 입력란이 아니기 때문에 일반적으로 다음과 같이 읽기 전용으로 설정하려고합니다.
class Meta: model = MyModel read_only_fields = ( 'model_method_field', )
-
==============================
4.여기에 귀하의 질문에 대한 답변. 당신은 당신의 모델 계정에 추가해야합니다 :
여기에 귀하의 질문에 대한 답변. 당신은 당신의 모델 계정에 추가해야합니다 :
@property def my_field(self): return None
이제 다음을 사용할 수 있습니다.
customField = CharField(source='my_field')
출처 : https://stackoverflow.com/a/18396622/3220916
-
==============================
5.self.author.full_name을 표시하기 위해 Field에 오류가 있습니다. ReadOnlyField와 함께 작동했습니다.
self.author.full_name을 표시하기 위해 Field에 오류가 있습니다. ReadOnlyField와 함께 작동했습니다.
class CommentSerializer(serializers.HyperlinkedModelSerializer): author_name = ReadOnlyField(source="author.full_name") class Meta: model = Comment fields = ('url', 'content', 'author_name', 'author')
-
==============================
6.Django Rest Framework의 마지막 버전에서는 모델에 추가하려는 필드의 이름을 사용하여 메소드를 만들어야합니다.
Django Rest Framework의 마지막 버전에서는 모델에 추가하려는 필드의 이름을 사용하여 메소드를 만들어야합니다.
class Foo(models.Model): . . . def foo(self): return 'stuff' . . . class FooSerializer(ModelSerializer): foo = serializers.ReadOnlyField() class Meta: model = Foo fields = ('foo',)
from https://stackoverflow.com/questions/14583816/django-rest-framework-how-to-add-custom-field-in-modelserializer by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 이 간단한 예제에서 datetime.strptime이 작동하지 않는 이유는 무엇입니까? (0) | 2018.10.29 |
---|---|
[PYTHON] 장고 애플리케이션이 개발 서버에서 실행 중인지 여부를 어떻게 알 수 있습니까? (0) | 2018.10.29 |
[PYTHON] 파이썬 3.x에서 파이썬의 객체를 상속하는 것이 필요하거나 유용합니까? (0) | 2018.10.29 |
[PYTHON] 튜플에 값을 추가하는 방법? (0) | 2018.10.29 |
[PYTHON] 파이썬의 표준 라이브러리에 정렬 된 컨테이너가없는 이유는 무엇입니까? (0) | 2018.10.29 |