Загрузить изображение рядом с другими данными, когда пользователь отправит форму. используя formData в jquery.
- Я добавил изображение в модель
- добавлен элемент изображения в виде
- добавлен тег ввода в html
- отправить данные через AJAX в представление
- получение данных из запроса ajax и добавление в функцию просмотра
ошибка отображения системы:
действующая форма
Внутренняя ошибка сервера: / create / te2chira
Traceback (последний вызов был последним): файл "C: \ Users \ LT"
GM \ AppData \ Local \ Programs \ Python \ Python37 \ Lib \ сайт-пакеты \ Джанго \ DB \ движки \ utils.py»,
строка 85, в _execute
return self.cursor.execute (sql, params) Файл "C: \ Users \ LT GM \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ db \ backends \ sqlite3 \ base.py",
строка 296, в исполнении
return Database.Cursor.execute (self, query, params) sqlite3.IntegrityError: Сбой ограничения NOT NULL: blog_te2chira.num
п
models.py
class te2chira(models.Model):
te2chira_id = models.AutoField( primary_key=True)
num = models.IntegerField()
# year = models.IntegerField()
te2chira_date = models.DateField()
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()
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 = ['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>
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")
Загрузить изображение со всеми данными, введенными пользователем.