Django: метод is_valid () всегда возвращается почему? - PullRequest
0 голосов
/ 28 марта 2020

Я просто практикуюсь django и создаю простое приложение, которое принимает имя пользователя и профиль pi c, а затем сохраняет его в методе database.is_valid () всегда возвращает false, когда я проверяю форму.

views.py

from django.shortcuts import render,redirect
from django.http import HttpResponse
from .models import student,photo
from .forms import student_data
# Create your views here.
def my_data(request):
    check=0
    myform=student_data()
    if (request.method=="POST"):
        myform=student_data(request.POST,request.FILES)
        if (myform.is_valid()):
            stu_name=myform.cleaned_data['name']
            stu_image=myform.cleaned_data['image']
            d=photo.objects.filter(name=stu_name)
            myform.save()
            if not d:
                new_data=photo(image=stu_image,name=stu_name)
                photo.save(self=new_data)
            else:
                check=1
    else:
        myform=student_data
    return render(request,'show.html',{'student':stu_name,'check':check})

forms.py

from django import forms
#from .models import student

class student_data(forms.Form):
    name=forms.CharField(widget=forms.TextInput,max_length=20)
    image=forms.ImageField()

models.py

from django.db import models

class photo(models.Model):
    image=models.ImageField()
    name=models.CharField(max_length=20)

    class Meta:
        db_table='photo'

html файл для формы.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div>
        <form name="form" action="/payment/show/" method="POST">
            {% csrf_token %}
            {{form.as_p}}
            <button type="submit">Add Me</button>
        </form>
    </div>
</body>
</html>

1 Ответ

3 голосов
/ 28 марта 2020

Если вы отправляете данные и файлы, тип кодировки формы должен быть multipart/form-data, поэтому:

<form name="form" action="/payment/show/" method="POST" <b>enctype="multipart/form-data"</b>>
    {% csrf_token %}
    {{form.as_p}}
    <button type="submit">Add Me</button>
</form>

Примечание : как правило, лучше используйте шаблонный тег {% url &hellip; %} [Django -doc] , чем писать жестко запрограммированные URL-адреса. Это упрощает понимание того, на какое представление вы ссылаетесь, если вы позже измените URL-адрес, также изменится разрешение URL-адреса и при необходимости закодирует значения URL-адреса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...