0
我有一个注册表单,用户可以上传他们的个人资料的头像,但我无法使其工作。我已经正确设置媒体:ImageField无法在窗体上传,在管理面板中上传
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
我在我的剖面模型的一个ImageField的这样:
class UserProfile(models.Model):
def is_square_png(self):
if not self.name.endswith('.png'):
raise ValidationError("You may only upload .png files!")
else:
w, h = get_image_dimensions(self)
if not h == w:
raise ValidationError("This picture is not square! Your picture must be equally wide as its height.")
else:
if not (h + w) >= 1000:
raise ValidationError("This picture is too small! The minimum dimensions are 500 by 500 pixels.")
else:
if not (h + w) < 2000:
raise ValidationError("This picture is too big! The maximum dimensions are 1000 by 1000 pixels.")
return self
def generate_user_folder_avatar(instance, filename):
return "users/%s/%s.png" % (instance.user, 'avatar')
...
avatar = models.ImageField(upload_to=generate_user_folder_avatar,storage=OverwriteStorage(),validators=[is_square_png],blank=True)
...
而在我的ModelForm,我还包括它:
class UserProfileForm(ModelForm):
def __init__(self, *args, **kwargs):
super(UserProfileForm, self).__init__(*args, **kwargs)
for field_name, field in self.fields.items():
field.widget.attrs['class'] = 'field-input-element'
class Meta:
model = UserProfile
fields = ('display_name', 'avatar', 'birthday', 'usertype', 'daw', 'usergenre', 'gender')
widgets = {
'birthday': AdminDateWidget(),
}
以及在我看来:
def RegisterView(request):
registration_success = False
if request.method == 'POST':
user_form = UserForm(request.POST, prefix='uf')
profile_form = UserProfileForm(request.POST, request.FILES, prefix='upf')
if user_form.is_valid() and profile_form.is_valid():
user_atr = user_form.save()
user_atr.set_password(user_atr.password)
user_atr.save()
profile = profile_form.save(commit=False)
profile.user = user_atr
profile.avatar = request.FILES.get('avatar')
profile.save()
registration_success = True
user_atr = authenticate(username=user_form.cleaned_data['username'],
password=user_form.cleaned_data['password'],
)
login(request, user_atr)
return HttpResponseRedirect("/")
else:
print (user_form.errors, profile_form.errors)
else:
user_form = UserForm(prefix='uf')
profile_form = UserProfileForm(prefix='upf')
return render(request, 'profile/register.html', {'profile_form': profile_form, 'user_form': user_form})
没有ma当我提交表单时,就好像该字段被忽略了一样。 django不会将网址添加到该字段,也不会实际上传文件。
我得到了没有错误,没有!它只是简单地不上传,不会将URL添加到模型实例。
是否打印'request.FILES的内容'?你在HTML表单中设置了enctype =“multipart/form-data”吗? – LostMyGlasses
打印request.FILES'的内容?不确定你的意思。但对于后者,是的。 –
我的意思是检查'request.FILES'是否包含上传的图像或者是否为空。 – LostMyGlasses