[Django] Form, ModelForm

๋ƒํ•ญยท2021๋…„ 9์›” 6์ผ
0

๐ŸฅžForm -> ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜/ ๊ณต๊ฒฉ ๋ฐ ๋ฐ์ดํ„ฐ ์†์ƒ์— ๋Œ€ํ•œ ์ค‘์š”ํ•œ ๋ฐฉ์–ด ์ˆ˜๋‹จ


๐Ÿฅ—ModelForm -> Model์„ ํ†ตํ•ด Form Class๋ฅผ ๋งŒ๋“ค๊ธฐ


ModelForm ์„ ์–ธํ•˜๊ธฐ


from django import forms
from .models import Article

class ArticleForm(forms.ModelForm):

	class Meta:
    		model = Article
            	fields = '__all__'
                

๐Ÿ”forms ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ํŒŒ์ƒ๋œ ModelForm ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›์Œ
๐Ÿณ์ •์˜ํ•œ ํด๋ž˜์Šค ์•ˆ์— Meta ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•˜๊ณ , ์–ด๋–ค ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ form์„ ์ž‘์„ฑํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ Metaํด๋ž˜์Šค์— ์ง€์ •

Widgets ์ ์šฉํ•˜๊ธฐ

class ArticleForm(forms.ModelForm):
	title = forms.CharField(
   		label = '์ œ๋ชฉ',
        	widget=forms.TextInput(
            		attrs={
                    		'class': 'my-site',
                            	'placeholder': 'Enter the title',
                            }
                 )
           )

	class Meta:
    		model = Article
            	fields = '__all__'

create view ํ•จ์ˆ˜ ๊ตฌ์กฐ ๋ณ€๊ฒฝ


def create(request):
	if request.method == 'POST':
		form = ArticleForm(request.POST)
		if form.is_valid():
			article = form.save()
			return redirect('articles:detail', article.pk)

	else:
		form = ArticleForm()
	context = {
		'form': form,
	}

	return render(request, 'articles/create.html', context)

update view ํ•จ์ˆ˜ ๊ตฌ์กฐ ๋ณ€๊ฒฝ

@require_http_methods(['GET', 'POST'])
def update(request, pk):
    # article = Article.objects.get(pk=pk)
    article = get_object_or_404(Article, pk=pk)
    # update
    if request.method == 'POST':
        form = ArticleForm(request.POST, instance=article)
        if form.is_valid():
            form.save()
            return redirect('articles:detail', article.pk)
    # edit
    else:
        form = ArticleForm(instance=article)
    context = {
        'article': article,
        'form': form,
    }
    return render(request, 'articles/update.html', context)

0๊ฐœ์˜ ๋Œ“๊ธ€