我有一个请求用户输入的表单,以便将记录保存到sqlite 3数据库中。
问题是,在我尝试将“上载图像”字段添加到表单之前,数据已正确保存。
但是现在系统第一次请求我添加空白和空
纳姆场
,
日期字段
,
IS送往
.
然后显示以下错误:
文件“C:\users\lt gm\desktop\final new\djangoweb\views.py”,第160行,在post-new中
id=form.te2chira_id attributeerror:“savete2chira”对象没有属性“te2chira_id”
-
向模型添加图片字段
-
在表单中添加图片元素
-
在HTML中添加了输入标记
-
通过ajax将数据发送到视图
-
从ajax请求获取数据并添加到view函数
模特儿
class te2chira(models.Model):
te2chira_id = models.AutoField( primary_key=True)
num = models.IntegerField(blank=True, null=True)
te2chira_date = models.DateField(blank=True, null=True)
title = models.CharField(max_length=250,default='DEFAULT VALUE', blank=True, null=True)
description = models.CharField(max_length=500,default='DEFAULT VALUE', blank=True, null=True)
is_sent=models.IntegerField(blank=True, null=True)
picture = models.ImageField(upload_to = 'pictures/%d/%m/%Y/',null=True, blank=True)
def __str__(self):
return str(self.te2chira_id)
Py
from django import forms
from blog.models import te2chira, destination
class SaveTe2chira(forms.ModelForm):
class Meta:
model = te2chira
fields = ['num','title', 'description','picture' ]
HTML
<form method="POST" class="form-style-9" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<li>
<input type="file" id="img" name="img"/>
</li>
<li>
<input type="submit" class="field-style field-full align-none" id="save" value="save" />
<script type="text/javascript">
$(function(){
$('#save').on('click',function(e){
e.preventDefault()
var formData = new FormData();
formData.append('num',$('#num').val())
formData.append('title',$('#title').val())
formData.append('text',$('#text').val())
formData.append('issent', 0)
formData.append('img', document.getElementById('img').files[0])
$.ajax({
url:'/create/te2chira',
method:'POST',
data:formData,
processData:false,
contentType:false,
headers:{
'X-CSRFToken':'{{csrf_token}}'
}
}).done(function(msg) {
document.location = "/creativePageSend.html"
alert('data saved')
}).fail(function(err){
alert('no data was saved')
})
})
})
</script>
</li>
</ul>
</form>
在添加图像字段之前,javascript是:
<script type="text/javascript">
$(function(){
$('#save').on('click',function(e){
e.preventDefault()
num=$('#num').val()
title=$('#title').val()
text=$('#text').val()
issent=0
$.ajax({
url:'/create/te2chira',
method:'POST',
data: {
// y:year,
// d:date,
n:num,
ti:title,
te:text,
s:0
},
headers:{
'X-CSRFToken':'{{csrf_token}}'
}
}).done(function(msg) {
document.location = "/creativePageSend.html"
alert('data saved')
}).fail(function(err){
alert('no data was saved')
})
})
})
</script>
VIEW
def post_new(request):
if request.method =='POST':
form = SaveTe2chira(data = request.POST, files = request.FILES)
if form.is_valid():
print("valid form")
form.save()
id=form.te2chira_id
print(id)
request.session['idTe2chira']=id
return render(request,'./creativePageSend.html',{'id':id})
else:
print("invalid form")
在我在表单中添加图像字段之前,函数是:
def post_new(request):
title = request.POST['ti']
description = request.POST['te']
num=request.POST['n']
issent=request.POST['s']
n=te2chira.objects.create(title=title,te2chira_date=timezone.datetime.now(),description=description,num=num,is_sent=issent)
print(timezone.datetime.now())
n.save()
id=n.te2chira_id
request.session['idTe2chira']=id
return render(request,'./creativePageSend.html',{'id':id})
提交包含所有字段的表单并将记录保存在数据库中