Django-rest-framework: TypeError: set_context() ๋ˆ„๋ฝ๋œ 1๊ฐœ์˜ ํ•„์ˆ˜ ์œ„์น˜ ์ธ์ˆ˜: 'serializer_field'

์— ๋งŒ๋“  2019๋…„ 06์›” 24์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: encode/django-rest-framework

์ฒดํฌ๋ฆฌ์ŠคํŠธ

  • [ ] Django REST ํ”„๋ ˆ์ž„์›Œํฌ์˜ master ๋ถ„๊ธฐ์— ํ•ด๋‹น ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
  • [ ] ๊ณต๊ฐœ ํ‹ฐ์ผ“๊ณผ ๋น„๊ณต๊ฐœ ํ‹ฐ์ผ“ ๋ชจ๋‘์—์„œ ์œ ์‚ฌํ•œ ๋ฌธ์ œ๋ฅผ ๊ฒ€์ƒ‰ํ–ˆ์ง€๋งŒ ์ค‘๋ณต๋œ ํ•ญ๋ชฉ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • [ ] ์‚ฌ์šฉ๋ฒ• ์งˆ๋ฌธ์ด ์•„๋‹™๋‹ˆ๋‹ค. (๋Œ€์‹  ํ† ๋ก  ๊ทธ๋ฃน์œผ๋กœ ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.)
  • [ ] ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. (๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ์ œ3์ž ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜•ํƒœ์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.)
  • [ ] ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๊ฒฝ์šฐ๋กœ ๋ฌธ์ œ๋ฅผ ์ค„์˜€์Šต๋‹ˆ๋‹ค.
  • [ ] ํ’€ ๋ฆฌํ€˜์ŠคํŠธ์— ์‹คํŒจํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ํฌํ•จ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค. (๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋„ ๋ฌธ์ œ๋ฅผ ์ˆ˜๋ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

์žฌํ˜„ ๋‹จ๊ณ„

ํด๋ž˜์Šค GraphDomainSerializer(serializers.ModelSerializer):
์‚ฌ์šฉ์ž = serializers.HiddenField(๊ธฐ๋ณธ๊ฐ’=serializers.CurrentUserDefault)

์˜ˆ์ƒ๋˜๋Š” ํ–‰๋™

์‹ค์ œ ํ–‰๋™

ํด๋ž˜์Šค CurrentUserDefault(๊ฐ์ฒด):
def set_context(self, serializer_field):
self.user = serializer_field.context['์š”์ฒญ'].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(self)
TypeError: set_context() ๋ˆ„๋ฝ๋œ 1๊ฐœ์˜ ํ•„์ˆ˜ ์œ„์น˜ ์ธ์ˆ˜: 'serializer_field'
[24/6/2019 14:34:45] "POST /graphs/ HTTP/1.1" 500 21130

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๊ธฐ๋ณธ๊ฐ’์€ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ์ธ์Šคํ„ด์Šค์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค . ๋ฌธ์„œ ์— serializers.CurrentUserDefault()

๋ชจ๋“  3 ๋Œ“๊ธ€

๊ธฐ๋ณธ๊ฐ’์€ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ์ธ์Šคํ„ด์Šค์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค . ๋ฌธ์„œ ์— serializers.CurrentUserDefault()

๊ธฐ๋ณธ๊ฐ’์€ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ์ธ์Šคํ„ด์Šค์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. serializers.CurrentUserDefault() ๋ฌธ์„œ์— ํ‘œ์‹œ๋œ ๋Œ€๋กœ

๊ทธ๊ฒƒ์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค

๊ธฐ๋ณธ๊ฐ’์€ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ์ธ์Šคํ„ด์Šค์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค . ๋ฌธ์„œ ์— serializers.CurrentUserDefault()

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰