django表单使用forms.ModelForm

win7

python2.7

django 1.6.5

因为使用数据库sqlite,项目中有models.py,所以使用方便的forms.ModelForm处理表单。

上传图像文件使用默认的defaultstorage。

1、settings.py里增加两行media的定义:

#Media
MEDIA_ROOT = 'e:/Depot/media'
MEDIA_URL = '/media/'

2、models.py

#coding: utf8
from django.db import models

class Product(models.Model):
    title = models.CharField(max_length=50, verbose_name='标题')
    description = models.TextField(verbose_name='描述')
    photo = models.ImageField(upload_to='product', verbose_name='图片')
    price = models.DecimalField(max_digits=8, decimal_places=2, verbose_name='价格')

3、forms.py

from django import forms
from models import *

class ProductForm(forms.ModelForm):

    class Meta:
        model = Product
        fields = ['title', 'description', 'photo', 'price']

其他的代码没写。

4、views.py

def create_product(request):
    #create new
    if request.method == 'POST':
        form = ProductForm(request.POST or None, request.FILES)
        if form.is_valid():
            form.save()
    return render(request, 'depot2/create_product.html', locals())

数据中有图像字段,因此实例化Form类时,要加上第2个参数requst.FILES。

这里使用Model,所以不需要手动对字段进行request.FILE的赋值。

5、template文件

显示表单的HTML文件,只需要注意,有文件上传时,要在<form>标签上加入 enctype="multipart/form-data"。

这个地方和views的第2个值必须填写。

否则会出现,提交表单,View也能看到数据,但就是不能提交到sqlite3里面,也不能上传文件。

项目根目录要建立media文件夹,可以看到 以upload_to的值为名在其下面建立了一个子目录。

建立好models.py后,是使用 django-groundwork来生成代码和模板的。

搞这一通,是在学习 大侠 心内求法 写的 《django实战》,不过他没有使用ImageField字段,所以我卡在这里。

也说明熟悉HTML物件属性,比熟悉python语法有用。

要使用media的图片,要在主urls.py如下:

from django.conf.urls import patterns, include, url
from django.conf.urls.static import static
from django.contrib import admin
import settings

admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'depot.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    url(r'^admin/', include(admin.site.urls)),
)+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

不过上面只是测试时用,说是等生产环境,还是要发布为static。

django表单使用forms.ModelForm

时间: 2024-10-11 20:04:46

django表单使用forms.ModelForm的相关文章

django03_表单(forms.ModelForm)login后台

一,创建一个表单创建一个Form表单有两种方式:第一种方式是继承于forms.Form,的一个子类,通过在form中选择你需要的类型来规定表单之中字段的类型 class LoginForm(forms.Form):     username = forms.CharField(max_length=15,                                 min_length=5,                                 #onblur = "Check(t

关于创建Django表单Forms继承BaseForm的问题

在创建Django表单时,因为需要验证用户输入的验证码是否正确,因此需要在session里提取当前验证码的值和POST提交过来的值进行比对,如图: 1 form.py 2 3 from django import forms 4 5 class LoginForms(forms.Form): 6 check_code = forms.CharField() 7 def clean_check_code(self): 8 if self.request.session.get('CheckCode

Django学习之表单(forms)

我们的博客现在已经实现了博客列表的查看,博客的查看.现在该是我们实现创建和更新博客的时候了. 要实现博客的创建和更新,我们需要学习Django表单的相关知识. 在处理表单的过程中,Django表单功能做了哪些工作呢? 传递数据的准备和重建 为数据创建HTML表单 从客户端接收和处理提交的表单和数据 Django Form类是系统的核心组件.在django中, 模型描述的是一个对象的逻辑架构,这绵行为,它显现给我们的方式.与此类似,Form类描述的是一个表单和决定它是如何工作和显示的. 一个模型类

Django表单——概述

参考文献: https://docs.djangoproject.com/zh-hans/2.0/topics/forms/ HTML 表单 一个表单必须明确两个要素: where: 应返回与用户输入相对应的数据的URL how:应该返回数据的HTTP方法 GET和POST GET和POST是处理表单时唯一使用的HTTP方法. 使用POST方法返回Django的登录表单,其中浏览器捆绑表单数据,对其进行编码以进行传输,将其发送到服务器,然后接收其响应. 相反,GET将提交的数据捆绑成一个字符串,

7Python全栈之路系列之Django表单

Python全栈之路系列之Django表单 从Request对象中获取数据 HttpRequest对象包含当前请求URL的一些信息: 熟悉/方法 描述 例如 request.path 除域名以外的请求路径 /hello/ request.get_host() 访问的域名 127.0.0.1:8000" or www.example.com request.get_full_path() 请求路径,可能包含查询字符串 /hello/?print=true request.is_secure() 是

Django表单处理

我们会从手工打造一个简单的搜索页面开始,看看怎样处理浏览器提交而来的数据.然后我们开始使用Django的forms框架. 搜索 在web应用上,有两个关于搜索获得巨大成功的故事:Google和Yahoo,通过搜索,他们建立了几十亿美元的业务.几乎每个网站都有很大的比例访问量来自这两个搜索引擎.甚至,一个网站是否成功取决于其站内搜索的质量.因此,在我们这个网站添加搜索功能看起来好一些. 开始,在URLconf (mysite.urls)添加搜索视图.添加类似(r'^search/$','mysit

[py]django表单

参考 django form的作用 1.生成html标签 2.验证输入内容 form生成表单 zhuji/forms.py - 实例化表单 - 定制form错误信息 - 定制表单类型 from django import forms class UserInfo(forms.Form): user_type_choice = ( (0, u'普通用户'), (1, u'高级用户'), ) user_type = forms.IntegerField(widget=forms.widgets.Se

Django表单API详解

声明:以下的Form.表单等术语都指的的广义的Django表单. Form要么是绑定了数据的,要么是未绑定数据的. 如果是绑定的,那么它能够验证数据,并渲染表单及其数据,然后生成HTML表单.如果未绑定,则无法进行验证(因为没有数据可以验证!),但它仍然可以以HTML形式呈现空白表单. 表单类原型:class Form[source] 若要创建一个未绑定的Form实例,只需简单地实例化该类: f = ContactForm() 若要绑定数据到表单,可以将数据以字典的形式传递给Form类的构造函数

17.Django表单验证

Django提供了3中方式来验证表单 官网文档:https://docs.djangoproject.com/en/1.9/ref/validators 1.表单字段验证器 a.引入:from django.core.exceptions import ValidationError b.定义验证方法,验证不通过抛一个ValidationError异常 def validate_name(value): 验证不通过 raise ValidationError("%s的信息已经存在"%v