django ValueError 질문입니다.
조회수 914회
admin페이지의 모델을 직접등록하면 문제없이 등록이 되는데, form을 통해서 즉, 글쓰기를 눌러서 나오는 new.html에서 내용을 작성하면 글이 올라가지질 않습니다. 수정을 눌러도 이미지를 제외한 제목과 내용만 수정되네요ㅠ 모델의 이미지 필드를 폼을 통해서 불러오고 DB에 올리는 과정에 문제가 있지 않을까 싶습니다.
글쓰기를 누르면 실행되는 함수는 blogpost입니다.
views.py
from django.shortcuts import render, get_object_or_404, redirect
from django.utils import timezone
from django.core.paginator import Paginator
from .models import Blog
from .form import BlogPost
def home(request):
blogs = Blog.objects #쿼리셋
#블로그 모든 글들을 대상으로
blog_list = Blog.objects.all()
#블로그 객체 세 개를 한 페이지로 자른다
paginator = Paginator(blog_list, 3)
#request된 페이지가 뭔지를 알아내고 (request 페이지를 변수에 담아내고)
page = request.GET.get('page')
#request된 페이지를 얻어온 뒤 return 해 준다
posts= paginator.get_page(page)
return render(request, 'home.html', {'blogs':blogs, 'posts':posts})
def detail(request, blog_id):
details = get_object_or_404(Blog, pk = blog_id)
return render(request, 'detail.html', {'details':details})
def new(request): #new.html을 띄워주는 함수
return render(request, 'new.html')
def blogpost(request):
# 1. 입력된 내용을 처리하는기능 -> POST
if request.method == 'POST':
form = BlogPost(request.POST)
if form.is_valid(): #입력이 잘 됐는지 확인
post = form.save(commit=False) #모델 객체를 반한하되, 저장하지 않고
post.pub_data = timezone.now()
post.save()
return redirect('home')
# 2. 빈페이지를 띄워주는 기능 -> GET
else:
form = BlogPost()
return render(request, 'new.html', {'form':form})
def update(request, pk):
#어떤 블로그를 수정할 지 블로그 객체를 갖고오기
blog = get_object_or_404(Blog, pk = pk)
#해당하는 블로그 객체의 pk에 맞는 입력공간을 가져오기
form = BlogPost(request.POST, instance=blog)
if form.is_valid():
#입력받은 값이 유효한 값인지 확인
form.save()
return redirect('home')
return render(request, 'new.html',{'form':form})
models.py
from django.db import models
class Blog(models.Model):
title = models.CharField(max_length=200)
pub_data = models.DateTimeField('data published')
image = models.ImageField(upload_to='images/')
body = models.TextField()
def __str__(self):
return self.title
def summary(self):
return self.body[:100]
form.py
from django import forms
from .models import Blog
class BlogPost(forms.ModelForm): #모델을 기반으로한 입력공간을 만들기 위해선
class Meta:
model = Blog #어떤모델
fields = ['title', 'image', 'body'] #어떤 것을 입력받을지 >> 처리해주는 함수를 views.py에
템플릿에서의 글쓰기 링크설정
<a href="{% url 'newblog' %}">글쓰기</a>
app폴더의 urls.py
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('<int:blog_id>/', views.detail, name="detail"),
path('new/', views.new, name="new"),
# path('create/', views.create, name="create"),
path('newblog/', views.blogpost, name="newblog"),
path('update/<int:pk>',views.update, name="update"),#
path('delete/<int:pk>',views.delete, name="delete"),
]
project폴더의 urls.py
from django.contrib import admin
from django.urls import path, include
import blogapp.views
from django.conf import settings
from django.conf.urls.static import static # 미디어파일을 이용하기 위해 임포트
urlpatterns = [
path('admin/', admin.site.urls),
path('', blogapp.views.home, name="home"),
path('blog/',include('blogapp.urls')), #블로그앱 폴더안에 있는 urls로부터 include 해와라
]
urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력