Today I Learn 220408
์ค๋์ Django CRUD๋ฅผ ํ์ฉํ ํ๋ก์ ํธ๋ฅผ ํ๋ค. ์ด์ ์ ํ๋๊ฒ์์ develop๋ ํ๋ก์ ํธ์๋ค. ๊ทธ ์ค ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ์ด์ ์๋ html์ ์ด์ฉํด ๊ตฌํํด๋๋ค๋ฉด, ์ด๋ฒ์๋ Django ModelForm์ ํ์ฉํ์ฌ ๋ ๊น๋ํ ํํ๋ฅผ ์ถ๋ ฅํด๋๋ค. ๋ํ bootstrap5๋ฅผ ํ์ฉํด ๋ ์์ฑ๋ ์๋ ํ์ด์ง๋ฅผ ๊ตฌํํด ๋๋ค.
์ด๋ฒ ํ๋ก์ ํธ์์ ์ด๋ ค์ ๋ ์
๋ช ์ธ์์ ์๋๋๋ก forms.py์ class์์ ํ๋๋ฅผ ์ค์ ํ๋๊ฒ ์ด์ง ๊น๋ค๋ก์ ๋ค. ์ด์ ์ ์ค์ตํ๋ ๊ฒ๊ณผ ๋ค๋ฅธ widget์ ์ฌ์ฉํ๋ ์ฝ๊ฐ ์ด๋ ค์์ด ์ปธ์๋ค.
from django import forms
from .models import Article
class ArticleForm(forms.ModelForm):
class Meta:
model = Article
fields = '__all__'
๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฌํ ํํ๋ก forms.py๋ ๊ตฌ์ฑ๋๋๋ฐ ์ฌ๊ธฐ์ widget์ ์ถ๊ฐํ ์ ์๋ค.
<Django์ ์์ ฏ ์ฌ์ฉ ๋ฐฉ๋ฒ 2๊ฐ์ง>
- ๊ถ์ฅํ๋ ๋ฐฉ๋ฒ
from django import forms
from .models import Article
#application/forms.py๋ฅผ ์ถ์ฒํจ!
#Django์ ์์ ฏ ์ฌ์ฉ ๊ถ์ฅ ์ฌํญ
class ArticleForm(forms.ModelForm):
title = forms.CharField(
label="์ ๋ชฉ",
widget=forms.TextInput(
attrs={
'class':'my-title form-control',
'placeholder':'์
๋ ฅํ์ธ์',
}
)
)
content = forms.CharField(
label="๋ด์ฉ",
widget=forms.Textarea(
attrs={
'class':'my-content form-control',
}
),
error_messages={
'required':'Please enter your content!!!!'
}
)
class Meta:
model = Article
fields = '__all__'
2. ๋ชจ๋ธ์ mappingํ๋ ๋ฐฉ๋ฒ
from django import forms
from .models import Article
#application/forms.py๋ฅผ ์ถ์ฒํจ!
#Django์ ์์ ฏ ์ฌ์ฉ ๊ถ์ฅ ์ฌํญ
class ArticleForm(forms.ModelForm):
class Meta: #๋ชจ๋ธ์ mapping
model = Article
fields = '__all__'
#exclude=('title',) #fields์ exclude๋ ๊ฐ์ด ์ฌ์ฉ ๊ธ์ง!
widgets = {
'title' : forms.TextInput(attrs={'placeholder': '์
๋ ฅํ์ธ์'})}
๋ด๊ฐ ๊ฐ์ฅ ํท๊ฐ๋ ธ๋ select์์ ๋ฃ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋ฅํ๋ค.
from django import forms
from .models import Article
class ArticleForm(forms.Form):
REGION_A = 'sl'
REGION_B = 'dj'
REGION_C = 'gj'
REGION_D = 'gm'
REGION_E = 'bu'
REGIONS_CHOICE = [
(REGION_A,'์์ธ'),
(REGION_B,'๋์ '),
(REGION_C,'๊ด์ฃผ'),
(REGION_D,'๊ตฌ๋ฏธ'),
(REGION_E,'๋ถ์ธ๊ฒฝ'),
]
title = forms.CharField(max_length=10)
content = forms.CharField(widget=forms.Textarea)
region = forms.ChoiceField(widget=forms.Select,choices=REGIONS_CHOICE)
๋ฐ๋ผ์ ์ด๋ฒ ํ๋ก์ ํธ์์๋ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ์ ์ด ํด๊ฒฐํ ์ ์์๋ค.
from django import forms
from .models import Movie
class MovieForm(forms.ModelForm):
GENRES_CHOICES = [
("์ฝ๋ฏธ๋", "์ฝ๋ฏธ๋"),
("๊ณตํฌ", "๊ณตํฌ"),
("๋ก๋งจ์ค", "๋ก๋งจ์ค")]
genre = forms.ChoiceField(choices=GENRES_CHOICES, widget=forms.Select())
score = forms.FloatField( widget=forms.NumberInput(attrs={'type':'number', 'step':0.5, 'min':0, 'max':5,}))
release_date = forms.DateField(widget=forms.DateInput(attrs={'type':'date'}))
class Meta:
model = Movie
fields = '__all__'
์ด๋ฒ ํ๋ก์ ํธ๋ก ๋ฐฐ์ด ์
์ด์ ๊ดํต์์๋ new์ edit์ ๋ฐ๋ก ๋ง๋ค์ด ์ฃผ์๋๋ฐ ์ด๋ฅผ ํ๋๋ก ํฉ์ณ์ ์ด์ฉํ ์ ์๋ค๋ ์ ์์ ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ ธ์ ์ข์๋ค. ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๋๋ฐ์๋ ModelForm์ ์ญํ ๋ ์ปธ๋ค.
์ด์ ์htmlํ์ผ์ ํ๋์ฉ ๋ค ์ธ๋๋ง๋ค ๋๋ฌด ํ๋ค์๋๋ฐ, ModelForm์ bootstrap๊น์ง ์ด์ฉํ๋ ์ฝ๋๋ ๊ฐ๊ฒฐํ๊ณ ์ถ๋ ฅ๋ฌผ๋ ๊น๋ํ์ฌ ์ง๋๋ฒ ๊ดํต์ ๊ฒฐ๊ณผ๋ณด๋ค ํํ์ด์ง ๋ค์ด ๋ชจ์ต์ผ๋ก ๋ฐ์ ๋์๋ค.
์ถ๊ฐ์ ์ผ๋ก ๊ธฐ์ตํ ์ !
- bootstrap5๋ฅผ ์ด์ฉ์ settings.py์ ์ฑ ๋ฑ๋ก์ ํด์ฃผ์ด์ผํ๊ณ , htmlํ์ผ์์ load๋ฅผ ํตํด bootstrap5๋ฅผ ๋ถ๋ฌ์์ผํ๋ค!
์์ผ๋ก๋ ๊ธฐ์ตํ๊ธฐ ์ํด ์ ๋ views.py
from django.shortcuts import render,redirect
from .models import Movie
from .forms import MovieForm
# Create your views here.
def index(request):
movies = Movie.objects.order_by('-pk')
context = {
'movies':movies,
}
return render(request,'movies/index.html',context)
def create(request):
if request.method == 'POST':
form = MovieForm(request.POST)
#create
if form.is_valid():
movie=form.save()
return redirect('movies:detail',movie.pk)
#new
else:
form = MovieForm()
context = {
'form' : form,
}
return render(request,'movies/create.html',context)
def detail(request,pk):
movie = Movie.objects.get(pk=pk)
context = {
'movie' : movie,
}
return render(request,'movies/detail.html',context)
def delete(request,pk):
movie = Movie.objects.get(pk=pk)
if request.method == 'POST':
movie.delete()
return redirect('movies:index')
else:
return redirect('movies:detail',movie.pk)
def update(request,pk):
movie = Movie.objects.get(pk=pk)
#update
if request.method == 'POST':
form = MovieForm(request.POST,instance=movie)
if form.is_valid():
movie=form.save()
return redirect('movies:detail', movie.pk)
#edit
else:
form = MovieForm(instance=movie)
context = {
'movie': movie,
'form': form,
}
return render(request, 'movies/update.html', context)
'๐๐จ๐๐๐ฒ ๐ ๐๐๐๐ซ๐ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐๐จ๐๐๐ฒ ๐ ๐๐๐๐ซ๐ง 2022.04.12.ํ (0) | 2022.04.12 |
---|---|
๐๐จ๐๐๐ฒ ๐ ๐๐๐๐ซ๐ง 2022.04.11.์ (0) | 2022.04.11 |
๐๐จ๐๐๐ฒ ๐ ๐๐๐๐ซ๐ง 2022.04.06.์ (0) | 2022.04.06 |
๐๐จ๐๐๐ฒ ๐ ๐๐๐๐ซ๐ง 2022.04.05.ํ (0) | 2022.04.06 |
๐๐จ๐๐๐ฒ ๐ ๐๐๐๐ซ๐ง 2022.04.04.์ (0) | 2022.04.04 |
๋๊ธ