рд╣рд╛рдп рд╕рдм, рдХреНрдпрд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред
рдХрд╛рд░рдг рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдВрд╕рд╛рдзрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА has_many рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдЗрдВрдбреЗрдХреНрд╕ рдПрдХреНрд╢рди рдХреЗ рдмреЛрдЭ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрдХ рдЗрдВрдбреЗрдХреНрд╕ рд╡реНрдпреВ рдореЗрдВ рдореИрдВ рдХреЗрд╡рд▓ рдЙрд╕рдХрд╛ рдирд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╢реЛ рдПрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдореИрдВ рд╕рднреА рдХрд┐рддрд╛рдмреЛрдВ рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдзрдиреНрдпрд╡рд╛рдж,
рдмреЛрдЬрди
+1
рдореИрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ: "рд╡рд┐рд╕реНрддрд╛рд░ рдХреНрд╖реЗрддреНрд░" рдФрд░ "рд╕реВрдЪреА рдХреНрд╖реЗрддреНрд░" рдХреЛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
+1 (#44 рдкрд░ рдбреБрдкреНрд▓реАрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)
рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреЛ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдЗрдВрдбреЗрдХреНрд╕ рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рд╕рдмрд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХрддреА рд╣реИрдВ:
рдореЗрдЯрд╛:
index_exclude_fields = ['some_m2m_field']
рдпрд╣ рд╣рдореЗрдВ рдХреБрдЫ рдбреАрдмреА рдХреНрд╡реЗрд░реА рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдореИрдВрдиреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдирд╣реАрдВ рдХрд┐рдпрд╛ 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
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рдорд╛рдзрд╛рди рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рд╣реИ рдРрд╕реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
get_detail
рдФрд░get_list
рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛редрдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдмрдВрдбрд▓ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рдКрдкрд░реА рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдереНрд░реЗрдбрд╕реЗрдл рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрд╕рд╛рдзрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдкреНрд░рддреНрдпреЗрдХ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдкрд░ рдирд╣реАрдВ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдХреЛрдИ рдЗрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ: