Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:从html表单向模型插入值时找不到模型?_Django_Django Models_Django Forms_Django Views - Fatal编程技术网

Django:从html表单向模型插入值时找不到模型?

Django:从html表单向模型插入值时找不到模型?,django,django-models,django-forms,django-views,Django,Django Models,Django Forms,Django Views,我正在尝试使用基本django表单向sqlite数据库插入值 这些是我的设置 型号.py class Book(models.Model): def get_absolute_url(self): return reverse ('books:detail',kwargs={'pk':self.pk}) def __str__(self): return self.name+ '-'+self.author name = model

我正在尝试使用基本django表单向sqlite数据库插入值

这些是我的设置

型号.py

class Book(models.Model):

   def get_absolute_url(self):
        return reverse ('books:detail',kwargs={'pk':self.pk})

   def __str__(self):

    return self.name+ '-'+self.author
   name         = models.CharField(max_length=120)
   author       = models.CharField(max_length=120)
   genere       = models.CharField(max_length=120)
   year         = models.CharField(max_length=120)
   image        = models.ImageField(upload_to='img/',null=True,blank=True)
from django import forms
from .models import Book

SOME_CHOICES = (
        ('Science fiction','Science fiction'),
        ('Psychology','Psychology'),
        ('Philosophy','Philosophy'),
        ('Novel','Novel'),
        ('Poetry','Poetry'),

   )

class BookForm(forms.Form):

   name          = forms.CharField()
   author    = forms.CharField()
   genere       = forms.CharField(label='Text',widget= forms .Select
                                                  (choices=SOME_CHOICES))
   year         = forms.CharField()
   book_image   = forms.ImageField()
from django.shortcuts import render,redirect
from books.forms import BookForm
from django import forms
from books.models import Book
from django.forms import ModelForm
from django.core.urlresolvers import reverse_lazy
from django.views import generic
from django.shortcuts import render
from django.http import HttpResponse
from .models import Book
from django.views.generic  import (ListView,CreateView,UpdateView,DeleteView,TemplateView)
from django.template import loader
from django.http  import Http404
from django.views.generic.edit import CreateView
from django.core.urlresolvers import reverse

    def Book_Create_View(request):
        form=BookForm(request.POST,request.FILES)
        if form.is_valid():
            book_obj=models.Book()
            book_obj.name = request.POST.get("name")
            book_obj.author = request.POST.get("author")
            book_obj.genere = request.POST.get("genere")
            book_obj.year = request.POST.get("year")
            book_obj.image = request.FILES
            book_obj.save()
            return redirect('books:index')
        else:
            form = BookForm()
            template ='books/book_form.html'
            return render(request,template,{'form':form})
from django.conf.urls import url
from .import views
from books.views import ListView,BookCategoryListView,BookCreateView,UpdateView,Book_Create_View
from books import views
app_name='books'

urlpatterns = [
    url(r'^$',views.IndexView.as_view(),name='index'),
    # url(r'bookadd/$',views.book_create_view,name='add'),
    # url(r'^add',views.book_create_view,name='book_add') ,
    # url(r'^create/$',views.BookCreateView.as_view(),name='create') ,
    url(r'^update/(?P<pk>\d+)/$',views.BookUpdateView.as_view(),name='update'),
    url(r'^delete/(?P<pk>\d+)/$',views.BookDeleteView.as_view(),name='delete'),
    url(r'^category/(?P<slug>\w+)$',views.BookCategoryListView.as_view()) ,
    url(r'^(?P<pk>[0-9]+)/$',views.DetailView.as_view(),name='detail'),
    url(r'^create/$',views.Book_Create_View,name='create') 
]
forms.py

class Book(models.Model):

   def get_absolute_url(self):
        return reverse ('books:detail',kwargs={'pk':self.pk})

   def __str__(self):

    return self.name+ '-'+self.author
   name         = models.CharField(max_length=120)
   author       = models.CharField(max_length=120)
   genere       = models.CharField(max_length=120)
   year         = models.CharField(max_length=120)
   image        = models.ImageField(upload_to='img/',null=True,blank=True)
from django import forms
from .models import Book

SOME_CHOICES = (
        ('Science fiction','Science fiction'),
        ('Psychology','Psychology'),
        ('Philosophy','Philosophy'),
        ('Novel','Novel'),
        ('Poetry','Poetry'),

   )

class BookForm(forms.Form):

   name          = forms.CharField()
   author    = forms.CharField()
   genere       = forms.CharField(label='Text',widget= forms .Select
                                                  (choices=SOME_CHOICES))
   year         = forms.CharField()
   book_image   = forms.ImageField()
from django.shortcuts import render,redirect
from books.forms import BookForm
from django import forms
from books.models import Book
from django.forms import ModelForm
from django.core.urlresolvers import reverse_lazy
from django.views import generic
from django.shortcuts import render
from django.http import HttpResponse
from .models import Book
from django.views.generic  import (ListView,CreateView,UpdateView,DeleteView,TemplateView)
from django.template import loader
from django.http  import Http404
from django.views.generic.edit import CreateView
from django.core.urlresolvers import reverse

    def Book_Create_View(request):
        form=BookForm(request.POST,request.FILES)
        if form.is_valid():
            book_obj=models.Book()
            book_obj.name = request.POST.get("name")
            book_obj.author = request.POST.get("author")
            book_obj.genere = request.POST.get("genere")
            book_obj.year = request.POST.get("year")
            book_obj.image = request.FILES
            book_obj.save()
            return redirect('books:index')
        else:
            form = BookForm()
            template ='books/book_form.html'
            return render(request,template,{'form':form})
from django.conf.urls import url
from .import views
from books.views import ListView,BookCategoryListView,BookCreateView,UpdateView,Book_Create_View
from books import views
app_name='books'

urlpatterns = [
    url(r'^$',views.IndexView.as_view(),name='index'),
    # url(r'bookadd/$',views.book_create_view,name='add'),
    # url(r'^add',views.book_create_view,name='book_add') ,
    # url(r'^create/$',views.BookCreateView.as_view(),name='create') ,
    url(r'^update/(?P<pk>\d+)/$',views.BookUpdateView.as_view(),name='update'),
    url(r'^delete/(?P<pk>\d+)/$',views.BookDeleteView.as_view(),name='delete'),
    url(r'^category/(?P<slug>\w+)$',views.BookCategoryListView.as_view()) ,
    url(r'^(?P<pk>[0-9]+)/$',views.DetailView.as_view(),name='detail'),
    url(r'^create/$',views.Book_Create_View,name='create') 
]
视图.py

class Book(models.Model):

   def get_absolute_url(self):
        return reverse ('books:detail',kwargs={'pk':self.pk})

   def __str__(self):

    return self.name+ '-'+self.author
   name         = models.CharField(max_length=120)
   author       = models.CharField(max_length=120)
   genere       = models.CharField(max_length=120)
   year         = models.CharField(max_length=120)
   image        = models.ImageField(upload_to='img/',null=True,blank=True)
from django import forms
from .models import Book

SOME_CHOICES = (
        ('Science fiction','Science fiction'),
        ('Psychology','Psychology'),
        ('Philosophy','Philosophy'),
        ('Novel','Novel'),
        ('Poetry','Poetry'),

   )

class BookForm(forms.Form):

   name          = forms.CharField()
   author    = forms.CharField()
   genere       = forms.CharField(label='Text',widget= forms .Select
                                                  (choices=SOME_CHOICES))
   year         = forms.CharField()
   book_image   = forms.ImageField()
from django.shortcuts import render,redirect
from books.forms import BookForm
from django import forms
from books.models import Book
from django.forms import ModelForm
from django.core.urlresolvers import reverse_lazy
from django.views import generic
from django.shortcuts import render
from django.http import HttpResponse
from .models import Book
from django.views.generic  import (ListView,CreateView,UpdateView,DeleteView,TemplateView)
from django.template import loader
from django.http  import Http404
from django.views.generic.edit import CreateView
from django.core.urlresolvers import reverse

    def Book_Create_View(request):
        form=BookForm(request.POST,request.FILES)
        if form.is_valid():
            book_obj=models.Book()
            book_obj.name = request.POST.get("name")
            book_obj.author = request.POST.get("author")
            book_obj.genere = request.POST.get("genere")
            book_obj.year = request.POST.get("year")
            book_obj.image = request.FILES
            book_obj.save()
            return redirect('books:index')
        else:
            form = BookForm()
            template ='books/book_form.html'
            return render(request,template,{'form':form})
from django.conf.urls import url
from .import views
from books.views import ListView,BookCategoryListView,BookCreateView,UpdateView,Book_Create_View
from books import views
app_name='books'

urlpatterns = [
    url(r'^$',views.IndexView.as_view(),name='index'),
    # url(r'bookadd/$',views.book_create_view,name='add'),
    # url(r'^add',views.book_create_view,name='book_add') ,
    # url(r'^create/$',views.BookCreateView.as_view(),name='create') ,
    url(r'^update/(?P<pk>\d+)/$',views.BookUpdateView.as_view(),name='update'),
    url(r'^delete/(?P<pk>\d+)/$',views.BookDeleteView.as_view(),name='delete'),
    url(r'^category/(?P<slug>\w+)$',views.BookCategoryListView.as_view()) ,
    url(r'^(?P<pk>[0-9]+)/$',views.DetailView.as_view(),name='detail'),
    url(r'^create/$',views.Book_Create_View,name='create') 
]
book\u form.html

{% extends 'books/base.html'%}
 {%block content%}


                   <form class="form-horizontal" action="" method="post" enctype="multipart/form-data">
                        {% csrf_token %}
                         {{form}}

                        <div class="form-group">
                                <button type="submit" class="btn btn-sucess">Submit
                                </button>
                            </div>
                      </form>
{% endblock %}
在我看来,url.py很好,因为我可以使用模型表单进行插入,它很好,但在这里它返回了错误


如何解决此问题并使用表单插入值?

您正在从模型调用Book。你应该打电话给Book,因为它已经导入了。 将代码更改为:

    if form.is_valid():
        book_obj=Book()
        book_obj.name = request.POST.get("name")
        book_obj.author = request.POST.get("author")
        book_obj.genere = request.POST.get("genere")
        book_obj.year = request.POST.get("year")
        book_obj.save()
        return redirect('books:index')

另一个错误
MultiValueDict'对象没有属性'\u committed'
删除这一行
book\u obj.image=request.FILES
并重试现在的事情是,在将其直接分配给图像之前,您需要处理
request.FILES
,这是一个不同的问题,您应该首先研究如何使用德扬戈。官方文档中有一个简单的例子,你几乎可以复制粘贴到你的代码中,关于StackOverflow的问题很多,可以告诉你怎么做。@dirkgroten,我想知道这个方法在使用模型表单时是否有效,它在做这个工作。。请注意,您永远不应该(我强调这一点,这非常重要)将模型变量直接分配给您的用户输入
book\u obj.author=request.POST.get(“author”)
非常危险!您正在将未经处理的输入保存到数据库中,这可能允许任何人向您的应用程序中注入恶意代码,包括SQL注入和XSS注入。始终使用表单的
已清理\u数据
字典。@dirkgroten,当然。。。。