首页 > 解决方案 > 图片未通过注册表格上传

问题描述

我的表单有问题,我一直在尝试在用户注册时上传图片,但由于发送了一条错误消息,上面写着“此字段是必需的”,所以它没有提交。我不太确定问题出在哪里,但我尝试过这样做“a_form=InformationForm(request.POST, request.FILES)”。但是我在用户注册时仍然收到错误消息(“此字段是必需的”),即使我在注册时选择了要与用户上传的图像。我想知道是否可以提供解决方案。图像和代码片段也显示了问题。感谢 表格在此处输入图像描述

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from .models import Information

class UserRegisterForm(UserCreationForm):
    email = forms.EmailField(widget=forms.TextInput(attrs={'placeholder': 'Email'}))
    username = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Username'}))
    first_name = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'First name'}))
    last_name = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Last name'}))
    password1 = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Password'}))
    password2 = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Confirm'}))
    

    class Meta:
        model = User
        fields = ['username','first_name','last_name', 'email', 'password1', 'password2']

class InformationForm(forms.ModelForm):
    #sex=forms.ChoiceField(choices=CHOICES)
    department = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Department'}))
    majors = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Majors'}))
    nationality = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Nationality'}))
    date_of_birth = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'yyyy/mm/dd'}))
    passport_number = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Passport number'}))
    phone_number = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Phone number'}))
    student_passport = forms.ImageField()
    

    class Meta:
        model=Information
        fields=['department','majors','degree','years','nationality','date_of_birth','passport_number','phone_number','sex','student_passport']



class UserUpdateForm(forms.ModelForm):
    email = forms.EmailField()

    class Meta:
        model = User
        fields = ['email']

class InformationUpdateForm(forms.ModelForm):
    class Meta:
        model=Information
        fields=['phone_number']

意见

from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from .forms import UserRegisterForm,UserUpdateForm ,InformationUpdateForm,InformationForm

def home(request):
    return render(request, 'student/home.html')

def register(request):
    if request.method == 'POST':
        form = UserRegisterForm(request.POST)
        a_form=InformationForm(request.POST, request.FILES)
        if form.is_valid() and a_form.is_valid():
            user = form.save()
            information = a_form.save(commit=False)
            information.user = user
            information.save()
            messages.success(request, f'Your account has been created! You are now able to log in')
            return redirect('login')
    else:
        form = UserRegisterForm()
        a_form = InformationForm()
    context={'form':form,'a_form':a_form }#,'a_form':a_form
    return render(request, 'student/register.html', context)


@login_required
def profile(request):
    return render(request, 'student/profile.html')

@login_required
def passport(request):
    return render(request,'student/passport.html')

@login_required
def profile_update(request):
    if request.method == 'POST':
        u_form=UserUpdateForm(request.POST,instance=request.user)
        i_form=InformationUpdateForm(request.POST,request.FILES,instance=request.user.information)
        if u_form.is_valid() and i_form.is_valid():
            u_form.save()
            i_form.save()
            messages.success(request, f'Your account has been updated!')
            return redirect('profile')
    else:
        u_form=UserUpdateForm(instance=request.user)
        i_form=InformationUpdateForm(instance=request.user.information)
    context={'u_form': u_form,
            'i_form':i_form}
    return render(request, 'student/profile_update.html',context)

注册.HTML

{% extends "student/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
    <div class="content-section">
        <form method="POST">
            {% csrf_token %}
            <fieldset class="form-group" enctype="multipart/form-data">
                <legend class="border-bottom mb-4">Join Today</legend>
                {{ form|crispy }}
                {{ a_form|crispy }}
            </fieldset>
             <div class="form-group">
                <button class="btn btn-outline-info" type="submit" value="submit">Sign Up</button>
            </div>
        </form>
        <div class="border-top pt-3">
            <small class="text-muted">
                Already Have An Account? <a class="ml-2" href="{% url 'login' %}">Sign In</a>
            </small>
        </div>
    </div>
{% endblock content %}

标签: pythondjango

解决方案


您是否添加enctype="multipart/form-data"了表单标签?

<form action="" method="post" enctype="multipart/form-data">
    {{form}} //your form stuff
</form>

你申请enctype="multipart/form-data"<fieldset>添加<form>标签


推荐阅读