standard update - pai-plznw4me/django-initializer GitHub Wiki
νμ€ Update κ°μ΄λ
What?
νμ€ μμ μΈλ±μ€λTargetrecord보μ¬μ£Όκ³ μ¬μ©μλ₯Ό ν΅ν΄ μμ ν μ μλλ‘ ν©λλ€.- νμ€ update page λ
standard_update()μ ν΅ν΄ μμ±λ μ½λ λ° HTML μ μλ―Ένλ€.
def standard_update(request, id, template_name, model, form_class, redirect_view, redirect_path_variables, base,
callback, **callback_kwargs):
model_inst = model.objects.get(id=id)
# POST μμ² μ²λ¦¬
if request.method == 'POST':
form = form_class(request.POST, request.FILES, instance=model_inst) # <-- FILES μ κ°μ΄ μ
λ ₯μ΄ λμ΄μΌ νλ€.
# μ ν¨μ± κ²μ¬ ν΅κ³Ό μ
if form.is_valid():
valid_inst = form.save(commit=False) # instance load
# μ½λ°± ν¨μ νΈμΆ
if callback:
callback(request=request, id=id, template_name=template_name, model=model, form_class=form_class,
redirect_view=redirect_view, redirect_path_variables=redirect_path_variables, base=base,
valid_inst=valid_inst, **callback_kwargs)
# λ°μ΄ν°λ² μ΄μ€μ μ μ₯
valid_inst.save() # instance save
# 리λλ μ
if redirect_path_variables: # redirect_path_variables μ΄ None μ΄ μλλ©΄
return redirect(redirect_view, **redirect_path_variables)
else:
return redirect(redirect_view)
# μ ν¨μ± κ²μ¬ μ€ν¨ μ
else:
content = render(request, template_name=template_name, context={'form': form}).content
ret_html = add_content(request, base, content)
return HttpResponse(ret_html)
# GET μμ² μ²λ¦¬
elif request.method == 'GET':
added_contents = []
form = form_class(instance=model_inst) # <-- FILES μ κ°μ΄ μ
λ ₯μ΄ λμ΄μΌ νλ€.
content = render(request, template_name=template_name, context={'form': form}).content.decode('utf-8')
added_contents.append(content)
# μ½λ°± ν¨μ νΈμΆ
if callback:
callback(request=request, id=id, template_name=template_name, model=model, form_class=form_class,
redirect_view=redirect_view, redirect_path_variables=redirect_path_variables, base=base,
added_contents=added_contents, **callback_kwargs)
# μ΅μ’
λ λλ§
ret_html = add_content(request, base, *added_contents)
return HttpResponse(ret_html)
μμ±
-
UpdateFormμ νμ©ν΄RecordμΆκ°μ νμν νλ νλͺ©μ κ°μ Έμ¨λ€. -
μΆκ°κ° λͺ¨λ λλλ©΄
redirectλ₯Ό ν΅ν΄ μ νΈλ₯Ό μ‘μ νλ€. -
callback ν¨μλ GET, POST λͺ¨λ μ€νλλ€.
if method == 'GET' or method == 'POST' μ ν΅ν΄μ μμ±
POST μμ callback ν¨μκ° μλνλ λ¨κ³λ μ ν¨μ± ν΅κ³Ό μ΄νμ΄λ€.
GET μμ callback ν¨μκ° μλνλ λ¨κ³λ form render μ΄ν added_content μ μΆκ°λ μ΄νμ΄λ€.
How to use ?
def update(request, id):
"""
νλ‘μ νΈλ₯Ό μ
λ°μ΄νΈνλ λ·° ν¨μμ
λλ€.
:param request: HttpRequest κ°μ²΄
:param id: νλ‘μ νΈμ μλ³μ
:return: HttpResponse κ°μ²΄
"""
def _callback(**kwargs):
if kwargs['request'].method == 'GET':
title = h_tag(2, 'νλ‘μ νΈ μ
λ°μ΄νΈ')
kwargs['added_contents'][0] = title + card_row((kwargs['added_contents'][0], 12))
return standard_update(request, id, 'standard/update.html', Project, ProjectUpdateForm, 'project:index', None,
'doctris', _callback)
def projectfile_update(request, id):
"""
νλ‘μ νΈ μ°μΆλ¬Όμ μ
λ°μ΄νΈνλ λ·° ν¨μμ
λλ€.
:param request: HttpRequest κ°μ²΄
:param id: μ°μΆλ¬Όμ μλ³μ
:return: HttpResponse κ°μ²΄
"""
def _callback(**kwargs):
if kwargs['request'].method == 'POST':
valid_inst = kwargs['valid_inst']
redirect_path_variables = kwargs['redirect_path_variables']
redirect_path_variables['id'] = valid_inst.project_id # => redirect(project:detail, id=valid_inst.project_id)
if kwargs['request'].method == 'GET':
title = h_tag(2, 'μ°μΆλ¬Ό μ
λ°μ΄νΈ')
kwargs['added_contents'][0] = title + card_row((kwargs['added_contents'][0], 12))
return standard_update(request, id, 'standard/update.html', ProjectFile, ProjectFileUpdateForm, 'project:detail',
{}, 'doctris', _callback)
Callback function
μ κ·Έλ¦Όκ³Ό κ°μ΄ callback function μ ν΅ν΄μ μ°λ¦¬λ λ€μν μμ λ€μ μν ν μ μμ΅λλ€. ν΄λΉ function μμμ callback function μ λ±ν μ ν΄μ§ λͺ©μ μ μμ§λ§ λνμ μΌλ‘ 2κ°μ§ λͺ©μ μ κ°μ§κ³ μνν©λλ€.
-
POST μΌ λ, μμ±λ instance μ νμ©ν΄ μμ μ ν λ μ¬μ©λ©λλ€.
-
POST μΌ λ, redirect μ νμν ν€μλμΈμλ₯Ό μΆκ°ν λ μ¬μ©ν©λλ€.
-
GET μΌ λ, content design μ μ νκ±°λ html μ μΆκ°νλ μμ λ€μ μνν©λλ€.
-
μ λͺ© μ μΆκ°νλ μμ λ€μ μνν©λλ€.
title = h_tag(2, 'νλ‘μ νΈ λͺ©λ‘') -
μ μμ μμλ
curd_table_htmlμdiv class=cardμ curd_table_html μ μ½μ νλ μμ λ€μ μνν©λλ€.added_contents = kwargs['added_contents'] added_contents[0] = title + card_row((added_contents[0], 12)
-
β οΈ μΆκ°μ μΌλ‘ added_contents μ μΆκ°λ μλ£λ μμλλ‘ νλ©΄μ λλλ§ λ©λλ€.