2017-07-18 108 views
1

我有表單字段,我想保留它們有時是空的。 問題是,視圖中的save()方法期待填充和拋出錯誤。Django保存字段爲NULL

我的形式:

from django import forms 
from cProfile import label 


class DocumentForm(forms.Form): 
    docfile = forms.FileField(
     label='Select a file' 
    ) 

    time_from = forms.DateTimeField(
     label = 'select range of time, from' 
    ) 

    time_to = forms.DateTimeField(
     label = 'to:', required = False 
    ) 

我的模型:

from django.db import models 
import uuid 
from django.utils import timezone 
from celery.worker.strategy import default 


class Document(models.Model): 
    docfile = models.FileField(upload_to='documents/%Y/%m/%d') 
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 
    time_from = models.DateTimeField(default=None, null=True, blank=True) 
    time_to = models.DateTimeField(default=None, null=True, blank=True) 

我的看法:

def list(request): 
    # Handle file upload 
    if request.method == 'POST': 
     form = DocumentForm(request.POST, request.FILES) 
     if form.is_valid(): 
      newdoc = Document(docfile=request.FILES['docfile'], time_from=request.POST['time_from'], time_to=request.POST['time_to']) 
      newdoc.save() 

我想保持time_to字段爲空時提交,但它給我這個錯誤:

Exception Value: [u"'' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format."]

我想原因是newdoc.save()期待的的DateTimeField字段time_to格式u'2017 -05-05 12' 時02分02秒並獲得一個空字符串或者類似的東西:U‘’

回答

0

您應該創建一個的ModelForm,而不是一種形式,並調用form.save(),這樣做django會幫助你管理你的屬性和值。

Django會創建一個id爲你的模型,所以你不需要創建這個ID

id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 

表單

class DocumentForm(forms.ModelForm): 
    class Meta: 
     model = Document #This will link your form to your model, and django can do his job 
     fields = '__all__' 

    docfile = forms.FileField(
     label='Select a file' 
    ) 

    time_from = forms.DateTimeField(
     label = 'select range of time, from' 
    ) 

    time_to = forms.DateTimeField(
     label = 'to:', required = False 
    ) 

你查看

def list(request): 
# Handle file upload 
if request.method == 'POST': 
    form = DocumentForm(request.POST, request.FILES) 
    if form.is_valid(): 
     form.save() 

如果你這樣做,您的DocumentForm(request.POST,request.FILES)將創建一個Document實例,它將驗證並存儲正確的值秒。

+0

這是偉大的,我試過了,它工作完美,我需要UUIDField其他的東西。不管怎樣,謝謝 –

相關問題