Django-rest-framework: рд▓реЗрдЦрди рддреНрд░реБрдЯрд┐: set_context () рд▓рд╛рдкрддрд╛ 1 рдЖрд╡рд╢реНрдпрдХ рд╕реНрдерд┐рддреАрдп рддрд░реНрдХ: 'serializer_field'

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

рдЬрд╛рдВрдЪ рд╕реВрдЪреА

  • [ ] рдореИрдВрдиреЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ Django REST рдврд╛рдВрдЪреЗ рдХреА master рд╢рд╛рдЦрд╛ рдХреЗ рд╡рд┐рд░реБрджреНрдз рдореМрдЬреВрдж рд╣реИред
  • [ ] рдореИрдВрдиреЗ рдЦреБрд▓реЗ рдФрд░ рдмрдВрдж рджреЛрдиреЛрдВ рдЯрд┐рдХрдЯреЛрдВ рдореЗрдВ рд╕рдорд╛рди рдореБрджреНрджреЛрдВ рдХреА рдЦреЛрдЬ рдХреА рд╣реИ рдФрд░ рдореБрдЭреЗ рдбреБрдкреНрд▓реАрдХреЗрдЯ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред
  • [ ] рдпрд╣ рдЙрдкрдпреЛрдЧ рдХрд╛ рдкреНрд░рд╢реНрди рдирд╣реАрдВ рд╣реИред (рдЙрдиреНрд╣реЗрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЪрд░реНрдЪрд╛ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред)
  • [ ] рдЗрд╕реЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред (рдЬрд╣рд╛рдВ рд╕рдВрднрд╡ рд╣реЛ, рд╣рдо рддреГрддреАрдп рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред)
  • [ ] рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рд░рд▓рддрдо рд╕рдВрднрд╡ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрдо рдХрд░ рджрд┐рдпрд╛ рд╣реИред
  • [ ] рдореИрдВрдиреЗ рдПрдХ рдЕрд╕рдлрд▓ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИред (рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИрдВ рддреЛ рднреА рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред)

рдкреНрд░рдЬрдирди рдХреЗ рдЪрд░рдг

рд╡рд░реНрдЧ GraphDomainSerializer (serializers.ModelSerializer):
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ = serializers.HiddenField (рдбрд┐рдлрд╝реЙрд▓реНрдЯ = serializers.CurrentUserDefault)

рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░

рд╡рд░реНрдЧ CurrentUserDefault (рд╡рд╕реНрддреБ):
def set_context (рд╕реНрд╡рдпрдВ, serializer_field):
self.user = serializer_field.context['request'].user

def __call__(self):
    return self.user

def __repr__(self):
    return unicode_to_repr('%s()' % self.__class__.__name__)

def get_default (рд╕реНрд╡рдпрдВ):
"""
рдпрджрд┐ рдХреЛрдИ рдЗрдирдкреБрдЯ рдирд╣реАрдВ рд╣реИ рддреЛ рдбреЗрдЯрд╛ рдХреЛ рдорд╛рдиреНрдп рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд▓реМрдЯрд╛рдПрдВ
рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИред

    If a default has not been set for this field then this will simply
    raise `SkipField`, indicating that no value should be set in the
    validated data for this field.
    """
    if self.default is empty or getattr(self.root, 'partial', False):
        # No default, or this is a partial update.
        raise SkipField()
    if callable(self.default):
        if hasattr(self.default, 'set_context'):
            **self.default.set_context(self)**
        return self.default()
    return self.default

рдлрд╝рд╛рдЗрд▓ "/Users/lishijin/.pyenv/versions/3.7.2/lib/python3.7/site-packages/rest_framework/fields.py", рд▓рд╛рдЗрди 490, get_default рдореЗрдВ
self.default.set_context(рд╕реНрд╡рдпрдВ)
рд▓реЗрдЦрди рддреНрд░реБрдЯрд┐: set_context () рд▓рд╛рдкрддрд╛ 1 рдЖрд╡рд╢реНрдпрдХ рд╕реНрдерд┐рддреАрдп рддрд░реНрдХ: 'serializer_field'
[24/рдЬреВрди/2019 14:34:45] "рдкреЛрд╕реНрдЯ/рдЧреНрд░рд╛рдл/рдПрдЪрдЯреАрдЯреАрдкреА/1.1" 500 21130

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

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рд╡рд░реНрдЧ: serializers.CurrentUserDefault() рдЬреИрд╕рд╛ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рд╡рд░реНрдЧ: serializers.CurrentUserDefault() рдЬреИрд╕рд╛ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡рд░реНрдЧ рдирд╣реАрдВ: serializers.CurrentUserDefault() рдЬреИрд╕рд╛ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдЗрд╕рдиреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рд╡рд░реНрдЧ: serializers.CurrentUserDefault() рдЬреИрд╕рд╛ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛

рдзрдиреНрдпрд╡рд╛рджя╝МрдЖрдкрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдореЗрд░реА рдорджрдж рдХреА

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

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

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

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

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

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

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