django with form - pai-plznw4me/django-initializer GitHub Wiki

1. κ°œμš”

form μ΄λž€ html page μ—μ„œ μ„œλ²„λ‘œ 정보듀을 μ„œλ‘œ κ΅ν™˜ν• λ•Œ μ„œλ‘œ 약속 ν•œ ν˜•νƒœλ‘œ λ°μ΄ν„°λ‘œ μ œκ³΅ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

μ‚¬μš© νŒ¨ν„΄μ€ 크게 2κ°€μ§€κ°€ μžˆλŠ”λ°

  1. μ²«λ²ˆμ§ΈλŠ” model에 μ €μž₯λ˜μ–΄ μžˆλŠ” 정보듀을 html page 에 λ³΄μ—¬μ£ΌλŠ” 것이닀.
  2. λ‘λ²ˆμ§ΈλŠ” html page 에 μž…λ ₯된 form 정보듀을 db 에 μ €μž₯ν•˜λŠ” 것이닀.

2. μž₯κ³ μ—μ„œ form 을 μ‚¬μš© νŒ¨ν„΄

2.1. Model 정보λ₯Ό 가져와 Html page 에 form ν˜•νƒœλ‘œ 보여주기

μ•„λž˜ 3κ°€μ§€ μˆœμ„œλ‘œ μ§„ν–‰ν•œλ‹€.

  1. forms.py(app level) 에 form λ“±λ‘ν•˜κΈ°
  2. views.py(app level) μ—μ„œ μƒμ„±ν•œ form μ‚¬μš© ν•˜κΈ°
  3. html page μ—μ„œ form 을 λ°›μ•„ rendering ν•  수 μžˆλ„λ‘ ν•˜κΈ°

2.1.1. forms.py(app level) 에 form λ“±λ‘ν•˜κΈ°

μ•„λž˜μ™€ 같은 skeleton μ½”λ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

class {λͺ¨λΈμ΄λ¦„}Form(forms.ModelForm):
    class Meta:
        model = λͺ¨λΈν΄λž˜μŠ€
        fields = ['μ‚¬μš©ν•  속성 1', 'μ‚¬μš©ν•  속성 2']

example)

from django import forms
from pybo.models import Question


class QuestionForm(forms.ModelForm):
    class Meta:
        model = Question  # μ‚¬μš©ν•  λͺ¨λΈ
        fields = ['subject', 'content']  # QuestionFormμ—μ„œ μ‚¬μš©ν•  Question λͺ¨λΈμ˜ 속성

2.1.2. views.py(app level) μ—μ„œ μƒμ„±ν•œ form μ‚¬μš© ν•˜κΈ°

from .forms import λͺ¨λΈμ΄λ¦„Form

def λͺ¨λΈμ΄λ¦„_κΈ°λŠ₯(request):
    form = λͺ¨λΈμ΄λ¦„Form()
    return render(request, λžœλ”λ  url, {'form': form})
def setting(request):
 form = TrainConfigForm()
 context = {'form': form}
 return render(request, 'train_classifier/setting.html', context)

2.1.3. html page μ—μ„œ form 을 λ°›μ•„ rendering ν•  수 μžˆλ„λ‘ ν•˜κΈ°

<form method="post" action="url">
{{ form.as_p }}
<button type="submit">μ €μž₯ν•˜κΈ°</button>
</form>

쑰건에 따라 form 을 λ³΄λ‚΄λŠ” url 이 λ‹¬λΌμ§€λŠ” κ²½μš°μ—λŠ” μ•„λž˜μ™€ 같이 form tag 에 action tag 을 μ§€μ •ν•˜μ§€ μ•ŠλŠ”λ‹€.

<form method="post">
{{ form.as_p }}
<button type="submit">μ €μž₯ν•˜κΈ°</button>
</form>

2. html page 에 μž…λ ₯된 form 정보 μ €μž₯

html page 에 <form> tag 등둝

<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
<button type="submit">μ €μž₯ν•˜κΈ°</button>
</form>

view page 에 form 정보 μ €μž₯ μ½”λ“œ 생성

    if request.method == 'POST':
        form = TrainConfigForm(request.POST)
        if form.is_valid():
            config = form.save(commit=False) # μ‹€μ œ μ €μž₯이 μ•„λ‹ˆλΌ 버퍼에 μ €μž₯ν•˜λŠ” μ½”λ“œ
            config.train_date = timezone.now()
            config.save() # μ‹€μ œ DB에 μ €μž₯
            return render(request, 'train_classifier/index.html')
        else:
            return render(request, 'train_classifier/index.html')

Reference

official forms

⚠️ **GitHub.com Fallback** ⚠️