У меня есть форма, которая запрашивает ввод данных пользователем для сохранения записей в базе данных sqlite 3.
проблема в том, что до того, как я попытался добавить поле загрузки изображения в форму, данные были сохранены правильно.
но теперь система сначала запросила, чтобы я добавил пустое и нулевое значение в num filed , поле даты , issent filed .
затем отобразится ошибка ниже:
Файл "C: \ Users \ LT GM \ Desktop \ Final new \ djangoWeb \ views.py", строка 160, в post_new
id = form.te2chira_id AttributeError: у объекта 'SaveTe2chira' нет атрибута 'te2chira_id'
- добавлено поле изображения для модели
- добавлен элемент изображения в виде
- добавлен тег ввода в html
- отправка данных через AJAX в представление
- получение данных из запроса ajax и добавление в функцию просмотра
models.py
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)
form.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>
views.py
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})
отправить форму со всеми полями и сохранить запись в базе данных