像这里的很多人一样,我必须处理表单问题,但即使有其他帖子我也看不到解决方案,这是我的文件:testeuh/models.py:
from django.db import models
from django.contrib import admin
# Create your models here.
class diapo(models.Model):
title = models.CharField(max_length=30)
corpus = models.TextField(max_length=300)
image = models.ImageField(upload_to="DossierImages")
class diapoAdmin(admin.ModelAdmin):
search_fields = ['title']
list_display = ['title']
testeuh/forms.py :
from django.forms import ModelForm
from .models import diapo
def DiapoForm(ModelForm):
class Meta:
model = diapo
fields = [
'title',
'corpus',
'image',
]
testeuh/views.py:
from django.shortcuts import render
from .forms import DiapoForm
from .models import diapo
# Create your views here.
def diapo_create_view(request):
form = DiapoForm(request.POST or None)
if form.is_valid():
form.save()
context = {
'form': form
}
return render(request, "diapo/create.html", context)
def diapo_detail_view(request):
obj = diapo.objects.get(id=1)
context = {
"object" : obj
}
return render(request, "diapo/detail.html", context)
urls.py:
"""SiteEcran URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/3.2/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from pages.views import home_view
from testeuh.views import diapo_detail_view
from testeuh.views import diapo_create_view
urlpatterns = [
path('create/', diapo_create_view),
path('admin/', admin.site.urls),
path('', home_view, name='home'),
path('diapo/', diapo_detail_view, name='diapo'),
]
和testeuh/templates/diapo/create.html :
{% extends 'base.html' %}
{% block content %}
<form>
{{ form.as_p }}
<input type='submit' value='Save' />
</form>
{% endblock %}
这样做(在 ~2h08 复制本教程:https://www.youtube.com/watch?v=F5mRW0jo-U4)我收到以下错误:AttributeError at /create/ 'NoneType' 对象没有属性 'is_valid' 在 /home/raptorjesus/Desktop/SiteEcran/testeuh/views.py,第 8 行,在 diapo_create_view 我不明白为什么 DiapoForm(request.POST or None) 返回一个 None 对象。如果我有更多的“安全性”,通过引入这样的代码
if request.method == 'POST':
if form.is_valid():
return HttpResponseRedirect('/thanks/')
return render(request, 'my_template.html', {'form': form})
我不再崩溃,但网页呈现时没有任何入口区域,只有“保存”按钮。谁能救救我?
答案 0 :(得分:0)
您的错误是针对 GET 请求,您的代码也在寻找已发布的表单。将您的 POST 请求与 GET 请求分开:
def diapo_create_view(request):
if request.method=='POST':
form = DiapoForm(request.POST)
if form.is_valid():
form.save()
form = DiapoForm()
context = {
'form': form
}
return render(request, "diapo/create.html", context)
答案 1 :(得分:0)
我实在是太笨了。这是解决方案:
from django.forms import ModelForm
from .models import diapo
class DiapoForm(ModelForm): #put class instead of def...
class Meta:
model = diapo
fields = [
'title',
'corpus',
'image',
]