无法使用Django提交表单(使用UserCreationForm和ModelForm)

时间:2020-03-24 15:06:04

标签: django django-models django-forms django-views modelform

我一直在尝试创建一种在注册时为用户上传个人资料图片的方法。为此,我创建了一个带有文件字段的自定义ModelForm,并将其与UserCreationForm一起显示。但是,它会引发此错误

ValueError at /signup
The UserProfile could not be created because the data didn't validate.

文件:-

models.py

from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):

    user=models.OneToOneField(User, on_delete=models.CASCADE)
    img=models.FileField(upload_to="profile/")

    def __str__(self):

        return self.user.username

forms.py

from django import forms
from . models import UserProfile
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
# Create your models here.

class ImgForm(forms.ModelForm):

    class Meta:
        model=UserProfile
        fields=['img']

urls.py

from django.urls import path 
from . import views 

urlpatterns = [

    path('', views.signin, name="signin"),
    path('signup', views.signup, name="signup"), 
    path('logout', views.logout, name="logout")


]

views.py

from django.shortcuts import render, redirect
from django.contrib.auth.models import User
from django.contrib import auth
from django.http import HttpResponse
from .forms import ImgForm
from django.contrib.auth.forms import UserCreationForm
# Create your views here.

def signup(request):

    if request.method == 'POST':

        form=UserCreationForm(request.POST)
        imgform=ImgForm(request.POST, request.FILES)

        if form.is_valid() and imgform.is_valid():

            #looks good

            user = form.save()
            img=imgform.save()
            img.user=user

            return redirect('/')

        else:

            html = "<html><body><script>alert('Invalid form')</script></body></html>"
            return HttpResponse(html)

    else:

        form=UserCreationForm()
        imgform=ImgForm()
        context={

            'form':form, 
            'imgform':imgform
        }

        return render(request, "register/signup.html", context)

表单HTML代码(Signup.html)

            <div class="card-body">
                    <h1>Sign Up</h1>
                    <form action="{% url 'signup' %}" method="POST">
                    {% csrf_token %}

                    {{form.as_p}}
                    {{imgform.as_p}}
                    <div class="row">

                        <div class="col-4 text-right">
                        <input type="submit" class="btn btn-primary" value=" Sign Up " />
                        </div>
                    </div>
                </form>
                </div>

我尝试过的方法:

尝试删除views.py中的imgform有效性检查(已删除imgform.is_valid()),删除了所有imgform实例和提交的表单,没有任何问题(没有课程图片)。所以我最好的猜测是该错误是由于不正确保存imgform引起的。我自己找不到问题。任何帮助表示赞赏!

谢谢。

0 个答案:

没有答案
相关问题