【发布时间】:2012-03-06 12:45:06
【问题描述】:
这是我的表格:
class AvatarUploadForm(forms.Form):
avatar = forms.ImageField(label='Image', help_text='Maximum size: 100x100px')
# Validation stuff down here.
和型号:
class UserProfile(models.Model):
user = models.OneToOneField(User)
post_count = models.IntegerField(default=0)
avatar = models.ImageField(null=True, blank=True, upload_to='images/avatars')
# ...
以及当前未完成且可能存在错误的视图:
@login_required
def user(request, username):
user = get_object_or_404(User, username=username)
profile = user.profile
if request.user == user:
if request.method == 'POST':
form = AvatarUploadForm(request.POST, request.FILES)
if form.is_valid():
profile.avatar = request.FILES['avatar']
profile.save()
return render_to_response('forum/user.html', {'profile_user': user, 'profile': profile},
context_instance=RequestContext(request))
else:
form = AvatarUploadForm()
return render_to_response('forum/user.html', { 'profile_user': user, 'profile': profile, 'form': form },
context_instance=RequestContext(request))
return render_to_response('forum/user.html', { 'profile_user': user, 'profile': profile })
我想要的是保留原始文件扩展名,.png、.gif 或其他文件,但将文件名更改为用户的 user_id 或用户名。
由于在注册时,用户不会上传头像,并且在您查看页面时会创建个人资料,头像上传表单是一个,我们可以假设用户个人资料已经存在。
我认为解决方案在于使 upload_to 成为可调用对象,但我不完全确定。
谢谢。
【问题讨论】:
-
你的想法是对的。将其设为callable,如果有问题,请在此处提问。但是你应该先自己尝试一下。