python - 图片未通过注册表格上传
问题描述
我的表单有问题,我一直在尝试在用户注册时上传图片,但由于发送了一条错误消息,上面写着“此字段是必需的”,所以它没有提交。我不太确定问题出在哪里,但我尝试过这样做“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 %}
解决方案
您是否添加enctype="multipart/form-data"
了表单标签?
<form action="" method="post" enctype="multipart/form-data">
{{form}} //your form stuff
</form>
你申请enctype="multipart/form-data"
请<fieldset>
添加<form>
标签
推荐阅读
- .net - 如何在 Heroku 上直接将我的应用程序重定向到 https?
- mongodb - 过滤器的通用 TypeScript 类型
- django - 如何为用户名添加外键。Django REST 框架
- javascript - 在呈现服务器端的大型分页 DataTable 中的任何行中查找数据
- python - Django显示参考名称而不是ID
- r - 如何使用 R 中的 tidyverse 按组创建一个变量的值组合
- google-cloud-platform - 如何为服务帐户设置 Google Cloud 应用程序凭据
- node.js - 如何使用 Google Cloud Functions 和 puppeteer 将屏幕截图保存在 Google Cloud Bucket 中?
- java - 有更好的方法来检查 Top Activity 是否发生了变化?
- django - CPanel 上的 Django 部署错误“Apache 没有对该文件的读取权限。请修复相关文件权限。”