рдЗрд╕ рдмреЗрдХрд╛рд░ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
class MySerializer(serializers.Serializer):
random_number = serializers.SerializerMethodField()
def get_random_number(self):
# Chosen by fair dice roll.
# Guaranteed to be random.
return 4
рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХреЛ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рд╣реИ рдФрд░ рдУрдкрдирдПрдкреАрдЖрдИ рд╕реНрдХреАрдорд╛ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
properties:
random_number:
type: string
required:
- random_number
рдпрд╣рд╛рдВ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдбреАрдЖрд░рдПрдл рдХреЛ рдпрд╣рд╛рдВ type: number
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛:
output_field
рд╡рд┐рд╢реЗрд╖рддрд╛, рдЬреИрд╕реЗ serializers.SerializerMethodField(output_field=serializers.IntegerField())
, рдЗрд╕реА рддрд░рд╣ Django рдХреА рдХреНрд╡реЗрд░реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдПopenapi_type(serializers.SerializerMethodField(), serializers.IntegerField())
рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛, рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреНрд░рд┐рдпрд╛рдУрдВ рдкрд░ рд╡рд┐рд╡рд░рдг рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди:
random_number = serializers.SerializerMethodField()
def get_random_number(self):
return 4
get_random_number.output_field = serializers.IntegerField()
рд╣рд╛рдп @ рд▓реБрд╕реАрдбрд┐рдпрдЯред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рддрддреНрдХрд╛рд▓ рддрд░реАрдХрд╛ AutoSchema._map_field()
рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдкреНрд░рд╢реНрди рдореЗрдВ рдХреНрд╖реЗрддреНрд░ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдпрд╛ рддреЛ рдкреНрд░рддрд┐-рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ/рджреГрд╢реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВред
рд╣рдо рдЕрдВрддрддрдГ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЖрдПрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореИрдВ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВред
рдореЗрд░реЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЬрд┐рд╕ рдПрдкреАрдЖрдИ рдХреЛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рд╡рд╣ рдЯрд╛рдЗрдк рд╣рд┐рдВрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреИрд╕реЗ:
def get_foo(self, obj) -> int:
return 1
рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ https://github.com/encode/django-rest-framework/pull/7089 рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдЗрд╕реЗ рджреВрд╕рд░реЗ рдкреАрдЖрд░ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕рдВрднрд╛рд▓ рдирд╣реАрдВ рдкрд╛рддрд╛ рд╣реИред рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдЖрдк рдиреЗрд╕реНрдЯреЗрдб рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ List[int]
, List[str]
, Dict[str, int]
рдЖрджрд┐ рдЬреИрд╕реЗ рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
@carlfarrington рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЖрдЬрдорд╛рдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдпрд╛ рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ? рдпрджрд┐ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдЪреАрдЬреЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИрдВ рдЬреЛ рдореВрд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдЕрднреА рдХреЗ рд▓рд┐рдП рдиреЗрд╕реНрдЯреЗрдб рдлрд╝реАрд▓реНрдб рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддреА рд╣реИрдВ рдпрд╛ рдХреНрдпрд╛ рд╣рдо рд╢реБрд░реВ рд╕реЗ рд╣реА (рдиреЗрд╕реНрдЯреЗрдб рдпрд╛ рдирд╣реАрдВ) рд╕рд░рдгрд┐рдпрд╛рдБ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рд╣рдо 3.12 рдХреЗ рд▓рд┐рдП map_field()
рдкреНрд░рдЪрд╛рд░ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХрд░реЗрдВрдЧреЗред рдпрд╣рд╛рдВ рдЬрд╛рдиреЗ рдХрд╛ рдпрд╣реА рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореЗрд░реЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЬрд┐рд╕ рдПрдкреАрдЖрдИ рдХреЛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рд╡рд╣ рдЯрд╛рдЗрдк рд╣рд┐рдВрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреИрд╕реЗ:
рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ https://github.com/encode/django-rest-framework/pull/7089 рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдЗрд╕реЗ рджреВрд╕рд░реЗ рдкреАрдЖрд░ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕рдВрднрд╛рд▓ рдирд╣реАрдВ рдкрд╛рддрд╛ рд╣реИред рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдЖрдк рдиреЗрд╕реНрдЯреЗрдб рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐
List[int]
,List[str]
,Dict[str, int]
рдЖрджрд┐ рдЬреИрд╕реЗ рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред@carlfarrington рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЖрдЬрдорд╛рдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдпрд╛ рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ? рдпрджрд┐ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдЪреАрдЬреЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИрдВ рдЬреЛ рдореВрд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдЕрднреА рдХреЗ рд▓рд┐рдП рдиреЗрд╕реНрдЯреЗрдб рдлрд╝реАрд▓реНрдб рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддреА рд╣реИрдВ рдпрд╛ рдХреНрдпрд╛ рд╣рдо рд╢реБрд░реВ рд╕реЗ рд╣реА (рдиреЗрд╕реНрдЯреЗрдб рдпрд╛ рдирд╣реАрдВ) рд╕рд░рдгрд┐рдпрд╛рдБ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?