отправить форму с файлом, который не работает, используя django ajax jquery

Загрузите изображение рядом с другими данными, когда пользователь отправит форму. используя formData в jquery.

  • Я добавил поле изображения в модель
  • добавлен элемент изображения в форму
  • добавлен тег ввода в html
  • отправить данные через AJAX в представление
  • получение данных из запроса ajax и добавление в функцию просмотра

ошибка отображения системы:

Внутренняя ошибка сервера действительной формы: / create / te2chira

Отслеживание (последний вызов последним): файл «C: \ Users \ LT GM \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ db \ backends \ 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 n

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")

Загрузите изображение со всем пользовательским вводом.


person Pyleb Pyl3b    schedule 11.01.2019    source источник


Ответы (2)


Ошибка вызывается из-за того, что такие поля, как num, te2chira_date, is_sent, пусты.

установить для него значения по умолчанию или blank=True, null=True и перенести его

person Clifton Avil D'Souza    schedule 11.01.2019

В вашей форме Django есть только поля ['title', 'description','picture' ], но ваша HTML-форма отправляет ['title', 'num', 'text', 'img', 'issent']. Таким образом, ваша форма в основном устанавливает только title и действительна, потому что description и picture могут быть blank.

При сохранении формы для экземпляра модели установлено только title, все остальные поля пусты, что не допускается в соответствии с определением модели.

Вы должны сделать так, чтобы имена полей HTML совпадали с именами полей формы, а также перед сохранением формы (и модели) убедитесь, что все обязательные поля модели имеют значение.

person dirkgroten    schedule 11.01.2019