django表單使用forms.ModelForm
阿新 • • 發佈:2019-01-31
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。