동일한 모델의 DRF 직렬 변환기 클래스가 몇 개 있습니다. 코드 반복을 피하기 위해 클래스 생성 코드를 함수로 옮기고 싶습니다.
따라서 기본적으로 함수에서 클래스를 반환해야하지만 클래스 내부의 함수 매개 변수에 액세스 할 수 없습니다 .
def get_course_serializer(fields, read_only_fields=None):
class CourseSerializer(serializers.ModelSerializer):
if "id" in fields:
id = serializers.CharField(default="", read_only=True)
class Meta:
model = Course
fields = fields
if read_only_fields:
read_only_fields = read_only_fields
return CourseSerializer
여기서는 CourseSerializer 클래스 정의 내 에서 필드 에 액세스 할 수 없습니다 . 글로벌 키워드를 사용해 보았지만 작동하지 않았습니다.
이 기능을 아래와 같이 사용할 계획입니다.
CourseListSerializer = get_course_serializer(
["id", "title", "slug", "description"])
type
클래스를 동적으로 생성 하는 데 사용할 수 있습니다 . 다음과 같이 작동합니다 (예상되지 않음).
def get_course_serializer(fields, read_only_fields=None):
mapping = {}
if "id" in fields:
mapping["id"] = serializers.CharField(default="", read_only=True)
...
CourseSerializer = type("CourseSerializer", (serializers.ModelSerializer, ), mapping)
return CourseSerializer
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다