Django保存字段为NULL
问题描述:
我有表单字段,我想保留它们有时是空的。 问题是,视图中的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‘’
答
您应该创建一个的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实例,它将验证并存储正确的值秒。
这是伟大的,我试过了,它工作完美,我需要UUIDField其他的东西。不管怎样,谢谢 –