Django-rest-framework: OpenAPI рд╕реНрдХреАрдорд╛ рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП SerializerMethodField рдкрд░ рдлрд╝реАрд▓реНрдб рдкреНрд░рдХрд╛рд░ рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 13 рдЬрдире░ 2020  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: encode/django-rest-framework

рдЗрд╕ рдмреЗрдХрд╛рд░ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

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()
    
  • рдмрд╕ рдХреБрдЫ рдбреАрдЖрд░рдПрдл рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╢рд╛рдпрдж рд╕рдВрднрд╛рд╡рд┐рдд рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╣реАрдВ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
Enhancement Schema Generation

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореЗрд░реЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЬрд┐рд╕ рдПрдкреАрдЖрдИ рдХреЛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рд╡рд╣ рдЯрд╛рдЗрдк рд╣рд┐рдВрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреИрд╕реЗ:

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 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣рд╛рдп @ рд▓реБрд╕реАрдбрд┐рдпрдЯред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рддрддреНрдХрд╛рд▓ рддрд░реАрдХрд╛ 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() рдкреНрд░рдЪрд╛рд░ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХрд░реЗрдВрдЧреЗред рдпрд╣рд╛рдВ рдЬрд╛рдиреЗ рдХрд╛ рдпрд╣реА рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

gabn88 picture gabn88  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

snbuback picture snbuback  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

akhilputhiry picture akhilputhiry  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mrodal picture mrodal  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sebdiem picture sebdiem  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ