Django-tastypie: SHOW рдФрд░ INDEX рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдХреНрд╖реЗрддреНрд░

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рдЕрдХреНрддреВре░ 2010  ┬╖  40рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: django-tastypie/django-tastypie

рд╣рд╛рдп рд╕рдм, рдХреНрдпрд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

рдХрд╛рд░рдг рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдВрд╕рд╛рдзрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА has_many рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдЗрдВрдбреЗрдХреНрд╕ рдПрдХреНрд╢рди рдХреЗ рдмреЛрдЭ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрдХ рдЗрдВрдбреЗрдХреНрд╕ рд╡реНрдпреВ рдореЗрдВ рдореИрдВ рдХреЗрд╡рд▓ рдЙрд╕рдХрд╛ рдирд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╢реЛ рдПрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдореИрдВ рд╕рднреА рдХрд┐рддрд╛рдмреЛрдВ рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдзрдиреНрдпрд╡рд╛рдж,
рдмреЛрдЬрди

documentation feature

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

рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рдорд╛рдзрд╛рди рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рд╣реИ рдРрд╕реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП get_detail рдФрд░ get_list рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ред
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдмрдВрдбрд▓ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рдКрдкрд░реА рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдереНрд░реЗрдбрд╕реЗрдл рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрд╕рд╛рдзрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдкреНрд░рддреНрдпреЗрдХ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдкрд░ рдирд╣реАрдВ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдХреЛрдИ рдЗрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ:

class ArticleResource(BaseModelResource):
    owner = fields.ToOneField(UserResource, 'owner', full=True)

    class Meta:
        resource_name = "articles"

    def get_list(self, request, **kwargs):
        self.fields.pop("comments", None)
        return super(ArticleResource, self).get_list(request, **kwargs)

    def get_detail(self, request, **kwargs):
        self.fields["comments"] = fields.ToManyField(CommentResource, 'comments', full=True)
        return super(ArticleResource, self).get_detail(request, **kwargs)

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

+1
рдореИрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ: "рд╡рд┐рд╕реНрддрд╛рд░ рдХреНрд╖реЗрддреНрд░" рдФрд░ "рд╕реВрдЪреА рдХреНрд╖реЗрддреНрд░" рдХреЛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

+1 (#44 рдкрд░ рдбреБрдкреНрд▓реАрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)

рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреЛ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдЗрдВрдбреЗрдХреНрд╕ рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рд╕рдмрд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХрддреА рд╣реИрдВ:

  1. рдлреБрд▓_рдбреАрд╣рд╛рдЗрдбреНрд░реЗрдЯ рдХреЛ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рд╡рд┐рдзрд┐рдпрд╛рдБ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рд╢рд╛рдпрдж рдХреБрдЫ рдРрд╕рд╛:

рдореЗрдЯрд╛:
index_exclude_fields = ['some_m2m_field']

рдпрд╣ рд╣рдореЗрдВ рдХреБрдЫ рдбреАрдмреА рдХреНрд╡реЗрд░реА рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

  1. рдирд┐рд░реНрдЬрд▓реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд 'рд╡рд┐рдзрд┐' рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░реЗрдВред рдпрд╣ рдмрдВрдбрд▓ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬреИрд╕реЗ рдХреБрдЫ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдЬреЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рд╣рдо рдХреБрдЫ рдмреИрдВрдбрд╡рд┐рдбреНрде рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдореИрдВрдиреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдирд╣реАрдВ рдХрд┐рдпрд╛ 1. рдХреИрд╢рд┐рдВрдЧ рдкрд░ рдЕрд╕рд░ рдкрдбрд╝реЗрдЧрд╛ред
рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?

#48 рдореЗрдВ рднреА рдардЧрд╛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдореБрджреНрджреЗ рдХреЗ рд╕рд╛рд░реНрдердХ рдкрд╣рд▓реВ рд╣реИрдВред

рдЕрдЧрд░ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рддреЛ рдореИрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдмрд╣реБрдд рдЖрдЧреЗ рдирд┐рдХрд▓ рдЧрдпрд╛ рд╣реВрдВред рдХрд┐рд╕реА рднреА рддрд░рд╣ рдмреЗрд╣рддрд░ рдлрд╝рд╛рдЗрд▓ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╡рд╣рд╛рдВ рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдкрд░ 1.0 рдХрд╛ рд▓рдХреНрд╖реНрдп рд░рдЦреЗрдВрдЧреЗред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдХреА рдереЛрдбрд╝реА рдФрд░ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╢реЛ/рд╕реВрдЪреА рджреГрд╢реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рддрд░рд╣ рдПрдХ рдХреНрд╡реЗрд░реАрд╕реНрдЯреНрд░рд┐рдВрдЧ рдзреНрд╡рдЬ рд▓реЗрдирд╛ рд╣реИ:

&рдЖрдХрд╛рд░=[рдкреВрд░реНрдг|рд╕рд░рд▓|рдХреЛрдИ рдирд╣реАрдВ]

рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЪрдпрдирд┐рдд рд╕реНрддрд░ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рд╣реИрдХ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЦреЛрдЬрд╛, рд▓реЗрдХрд┐рди рдЬрдм рдореЙрдбрд▓ рд░рд┐рд╕реЛрд░реНрд╕ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ рддреЛ рдлрд╝реАрд▓реНрдб рд╢рд╛рдорд┐рд▓/рдмрд╣рд┐рд╖реНрдХреГрдд рд╣реЛрддреЗ рд╣реИрдВ, рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЪрдХреНрд░ рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдЬреЛ рдЙрдкрд▓рдмреНрдз рдерд╛ рдЙрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рдХрд┐рд╕реА рднреА рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ рдЖ рд╕рдХрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдиреБрд░реЛрдз рд╡рд╕реНрддреБ рдЙрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рдРрд╕рд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

+1

рдореИрдВ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдпрд╣рд╛рдВ рдкрд╣рд▓реЗ рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдпрджрд┐ рд╡рд┐рднрд┐рдиреНрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдпрджрд┐ рдЗрд╕реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд╕рд╛рде рднреА рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЕрдзрд┐рдХ/рдХрдо рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЕрдиреБрдорддрд┐рдпреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реЛрдЧрд╛ред рдпрджрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИ, рддреЛ рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдХреЛрдИ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред

+1

+1

+1

+1

+1

+1

+1

рдореИрдВ рд╕реВрдЪреА/рд╡рд┐рд╡рд░рдг рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рддрд┐ рд╡рд┐рдзрд┐ (POST, PUT, GET) рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдлрд╝реАрд▓реНрдб (рдпрд╛ рддреЛ рдлрд╝реАрд▓реНрдб рдпрд╛ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реВрдВред

рдпрд╣рд╛рдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ: рдЖрдк рдореВрд▓ рдореЙрдбрд▓ рдХреЗ рд╕рдВрд╕рд╛рдзрди рдореЙрдбрд▓ (рдЙрджрд╛рд╣рд░рдг рдореЗрдВ UserResource) рд╕реЗ рдХреБрдЫ рднреА рдмрд╛рд╣рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЗрд╕рдХреЗ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рджреГрд╢реНрдп рдореЗрдВ рднрд░рд╛ рд╣реЛрдЧрд╛ред рдЖрдкрдХреЛ рдореЙрдбрд▓ рд░рд┐рд╕реЛрд░реНрд╕ рдХреА рдбрд┐рд╣рд╛рдЗрдбреНрд░реЗрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХрд╛ рдЙрдк рдореЙрдбрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИ (рдмреНрд▓реЙрдЧрдкреЛрд╕реНрдЯ рд░рд┐рд╕реЛрд░реНрд╕ рдореЗрдВ рд▓реЗрдЦрдХ рд╢рд╛рдорд┐рд▓ рд╣реИ) рдФрд░ рдмрдВрдбрд▓ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред

рдЙрджрд╛рд╣рд░рдг:

class BlogPostResource(ModelResource):
     author = fields.ForeignKey(UserResource, 'author', full=True)
     ....
     class Meta:
         ...

def dehydrate(self, bundle):
         del bundle.data['author'].data['field_you_dont_wanna_show_here']
         del bundle.data['author'].data['field_you_dont_wanna_show_here']
         return bundle

рддреЛ рдЬрдм рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддрдм рднреА рдЖрдкрдХреЛ рд╕рднреА рдлрд╝реАрд▓реНрдб рдорд┐рд▓рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдмреНрд▓реЙрдЧрдкреЛрд╕реНрдЯ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрдХ рдХрд╛ рдкрд╣рд▓рд╛ рдирд╛рдо рдФрд░ рдЕрдВрддрд┐рдо рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?

рдПрдХ рдмрд╣реБрдд, рдмрд╣реБрдд рдЧрдВрджреЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрджрд╛рд╣рд░рдг: рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реАрд▓реНрдб рдХреЛ list_view рдореЗрдВ рдирд╣реАрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдбрд┐рдЯреЗрд▓_рд╡реНрдпреВ рдореЗрдВ рдХрд░рддрд╛ рд╣реИ, рдмрд┐рдирд╛ рд╕рдВрд╕рд╛рдзрди рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдП, рдмрд┐рдирд╛ рд╣рд╛рд░реНрдбрдХреЛрдбрд┐рдВрдЧ рдХреЗ url рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ :

class CompanyResource(ModelResource):
       """
       Tastypie resource for Company
      """
       projects = fields.ToManyField('api.resources.ProjectResource',
                                  'projects',full=True)
       class Meta:
           queryset = Company.objects.all()
           resource_name = 'companies'

       def dehydrate(self, bundle):
           if bundle.request.path == "/api/v1/companies/":
               del bundle.data['projects']
           return bundle

+1

+1

+1

рдореИрдВ рдЯреНрд░реЗрди рдореЗрдВ рд╕рд╡рд╛рд░ рд╣реЛрдиреЗ рдХреА рднреА рдЙрдореНрдореАрдж рдХрд░реВрдВрдЧрд╛ , рд▓реЗрдХрд┐рди рдЯреНрд░реЗрди рдХрд╛ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди

    def dehydrate(self, bundle):
        if self.get_resource_uri(bundle) == bundle.request.path:
            print "Detail"

        if self.get_resource_uri(bundle) != bundle.request.path:
            print "Not Detail - Could be list or reverse relationship."

        return bundle

рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреБрдЫ рдФрд░ рд╕реЛрдЪрд╛ рдФрд░ рдХреБрдЫ рдРрд╕рд╛ рд▓реЗрдХрд░ рдЖрдпрд╛ рдЬреЛ рдореБрдЭреЗ рд╡рд╣ рдХрд░рдиреЗ рджреЗрдиреЗ рдХреЗ рдХрд░реАрдм рдЖрддрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @bmihelac рдвреВрдВрдв рд░рд╣рд╛ рдерд╛ред

рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг @ashwoods рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реАрд▓реНрдб рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрджрд┐ рдпрд╣ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдереА:

class CompanyResource(ModelResource):
    """
    Tastypie resource for Company
    """

    class Meta:
        queryset = Company.objects.all()
        resource_name = 'companies'
        additional_detail_fields = {'projects': fields.ToManyField('api.resources.ProjectResource', 'projects',full=True)}

    def dehydrate(self, bundle):
        # detect if detail
        if self.get_resource_uri(bundle) == bundle.request.path:
            # detail detected, include additional fields
            bundle = self.detail_dehydrate(bundle)

        return bundle

    # detail_dehydrate is basically full_dehydrate
    # except we'll loop over the additional_detail_fields
    # and we won't want to do the dehydrate(bundle) at the end
    def detail_dehydrate(self, bundle):
        """
        Given a bundle with an object instance, extract the information from it
        to populate the resource.
        """
        # Dehydrate each field.
        # loop over additional_detail_fields instead
        #for field_name, field_object in self.fields.items():
        for field_name, field_object in self._meta.additional_detail_fields.items():
            # A touch leaky but it makes URI resolution work.
            if getattr(field_object, 'dehydrated_type', None) == 'related':
                field_object.api_name = self._meta.api_name
                field_object.resource_name = self._meta.resource_name

            bundle.data[field_name] = field_object.dehydrate(bundle)

            # Check for an optional method to do further dehydration.
            method = getattr(self, "dehydrate_%s" % field_name, None)

            if method:
                bundle.data[field_name] = method(bundle)

        # dehydrating the bundle will create an infinite loop
        #bundle = self.dehydrate(bundle)
        return bundle

+1, рдЕрднреА рдХреЗ рд▓рд┐рдП @dericcrago рд╕реЗ рдлрд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред

+1

+1

#526 рдореЗрдВ рдЖрдВрд╢рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рд╕рдм рдкрд░ рдмреЗрдЪрд╛ рдЧрдпрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдкрд░реАрдХреНрд╖рдг/рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреА рдХрдореА рд╣реИред

рдмрд╕ рдЗрд╕ рдЯрд┐рдХрдЯ рдХреЛ рджреЗрдЦрд╛ ... рдФрд░ рдКрдкрд░ рдЧреЛрдореЗрдж рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд 'рдЖрдХрд╛рд░' рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рддрд░рд╣ ...

рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ # 526 рдореЗрдВ рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдереЛрдбрд╝рд╛ рд╕реАрдорд┐рдд рдерд╛, рдЕрдЧрд░ рд▓реЛрдЧ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ 'рдЖрдХрд╛рд░' рдЪрд╛рд╣рддреЗ рдереЗ ...

рдирд┐рд░реНрдЬрд▓реАрдХрд░рдг рдХреЗ рдмрд╛рдж рдЦреЗрддреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП ... рдореЗрд░рд╛ рдкреВрд░рд╛ рдХрд╛рд░рдг рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд┐рд╕реНрддрд╛рд░_рдбреАрд╣рд╛рдЗрдбреНрд░реЗрдЯ рд╣реБрдХ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЛрдиреЛрдВ рд╕рд╣рд┐рдд рджреЛ рд╕рдВрднрд╛рд╡рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдореИрдВрдиреЗ #569 рдореЗрдВ рд╕реЗ рдПрдХ рд▓рд┐рдЦрд╛ рд╣реИ рдФрд░ #538 рднреА рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд░рддрд╛ рд╣реИ (#538 use_in рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗрдкрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ)ред рдореЗрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП meta рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЬреЛрдбрд╝рддрд╛ рд╣реИ (рдЬреЛ рд╡рд░реНрддрдорд╛рди fields рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ) рдЬрдмрдХрд┐ #538 рдлрд╝реАрд▓реНрдб рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рджреЛрдиреЛрдВ рд╡реИрдз рд▓рдЧрддреЗ рд╣реИрдВ, рдмрд╕ рдПрдХ рдбрд┐рдЬрд╛рдЗрди рдирд┐рд░реНрдгрдп рд╣реИ рдХрд┐ рдХрд┐рд╕ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЬрд╛рдирд╛ рд╣реИред рдореЗрдЯрд╛ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рд╕реБрд╕рдВрдЧрдд рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдлрд╝реАрд▓реНрдб рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рджреЛрдиреЛрдВ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдФрд░ use_in рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ meta рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @issackelly рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред

[рдЪрд┐рд▓реНрд▓рд╛рддреЗ рд╣реБрдП рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ #релрейрео рдХреЗ рдкреАрдЫреЗ рдореВрд▓ рдХрд╛рд░рдг рдерд╛, рдпрд╣ рдореЗрд░реЗ #релреирем рдХреА рд╕рдлрд╛рдИ рдереА]
рдмрд╣реБрдд рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ ... рдореЗрдЯрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, ModelResource, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдмрд╣рд┐рд╖реНрдХреГрдд рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдЬреЗрд▓ рд╣реЛрдЧрд╛ ...

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдПрдХ рдФрд░ рдЯрд┐рдХрдЯ рдореЗрдВ рдХрд╣рд╛ рдерд╛, рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ "рд╕рд░рд▓" рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛, рдЖрдИрдПрдордПрдЪрдУ, 1.0 рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд ... "рдХреНрд▓рд╛рдЗрдВрдЯ рдЪрдпрди рдпреЛрдЧреНрдп 'рдЖрдХреГрддрд┐рдпреЛрдВ' рдЬреИрд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рд╢рд╛рдпрдж рдмрд╛рдж рдореЗрдВ рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрдиреАрдп рд╣реЛ .. .

@funkybob рд╕рд╣рдордд, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдорд╛рдзрд╛рди рдХреНрд▓рд╛рдЗрдВрдЯ рдкрдХреНрд╖ рд╕реЗ рд╕рд╣рд╛рдпрдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ asap рд╢рд╛рдорд┐рд▓ рд╣реЛ рддрд╛рдХрд┐ 1.0 рдЬрд╛рд░реА рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрддреНрдкрд╛рджрди рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдкреАрдЖрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ # 538 рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдХреЙрд▓рдмреИрдХ рдХреА рд▓рдЪреАрд▓рд╛рдкрди рдкрд╕рдВрдж рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рдЕрдиреБрдорддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╕рдВрд╕рд╛рдзрди рдЫрд┐рдкрд╛рдирд╛ рд╣реИред

#569 . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛

рд╣рд╛рдп, рдХреЛрдИ рдЦрдмрд░? рд╡рд╣ рдкреАрдЖрд░ рдЬреАрд╡рди рдХреЛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж!

@dericcrago . рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╣реИрдХ рдХреЗ рд╕рд╛рде рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ

+1

рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рдорд╛рдзрд╛рди рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рд╣реИ рдРрд╕реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП get_detail рдФрд░ get_list рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ред
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдмрдВрдбрд▓ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рдКрдкрд░реА рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдереНрд░реЗрдбрд╕реЗрдл рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрд╕рд╛рдзрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдкреНрд░рддреНрдпреЗрдХ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдкрд░ рдирд╣реАрдВ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдХреЛрдИ рдЗрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ:

class ArticleResource(BaseModelResource):
    owner = fields.ToOneField(UserResource, 'owner', full=True)

    class Meta:
        resource_name = "articles"

    def get_list(self, request, **kwargs):
        self.fields.pop("comments", None)
        return super(ArticleResource, self).get_list(request, **kwargs)

    def get_detail(self, request, **kwargs):
        self.fields["comments"] = fields.ToManyField(CommentResource, 'comments', full=True)
        return super(ArticleResource, self).get_detail(request, **kwargs)

+1

рдПрдХ рдФрд░ рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ рд╕реВрдЪреА рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрд╕рд╛рдзрди рд╣реЛрдВ:

from tastypie.resources import ModelResource
from django.contrib.auth.models import User

# detail will show everything except password
class UserResourceDetail(ModelResource):
    class Meta:
        queryset = User.objects.all()
    excludes = ('password',)
    resource_name = 'user'

# list will only show username & date_joined (and exclude password)
class UserResource(UserResourceDetail):
    class Meta(UserResourceDetail.Meta):
        fields = ('username', 'date_joined')
    get_detail = UserResourceDetail().get_detail

# ... register & use UserResource

+1

@dnozay рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП +1

+1 @dnozay , рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ get_resource_uri рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рд╡рд░рдг рджреГрд╢реНрдп рдХреЗ рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░реЗ, рддреЛ рдЖрдкрдХреЛ UserResource рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред

UserResourceDetail.get_resource_uri = UserResource().get_resource_uri

рдЕрдиреНрдпрдерд╛ resource_uri рд╕рднреА рд╡рд┐рд╡рд░рдг рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдЦрд╛рд▓реА рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд: #1265

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

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

Roarster picture Roarster  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

bastbnl picture bastbnl  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

hashemian picture hashemian  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lordi picture lordi  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

adamzap picture adamzap  ┬╖  18рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ