所以这是我的表格:
class AvatarUploadForm(forms.Form):
avatar = forms.ImageField(label='Image', help_text='Maximum size: 100x100px')
# Validation stuff down here.
Run Code Online (Sandbox Code Playgroud)
和型号:
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')
# ...
Run Code Online (Sandbox Code Playgroud)
目前尚未完成的潜在错误观点:
@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 })
Run Code Online (Sandbox Code Playgroud)
我想要的是保留原始文件扩展名,.png,.gif或其他,但将文件名更改为用户的user_id或用户名.
由于在注册时,用户不上传头像并且当您查看头像上传时,我们可以假设用户个人资料已经存在.
我认为解决方案在于使upload_to成为可调用的,但我并不完全确定.
谢谢.
你是对的.upload_to可以是可调用的.以下是我的一个项目的摘录,您可以根据自己的规格进行调整.这比你要求的更多,但我认为它显示了你可以拥有的灵活性.
import os
import random
import string
from datetime import datetime
....
def generate_random_string(digit_length=6, char_length=6):
digits = "".join( [random.choice(string.digits) for i in xrange(6)] )
chars = "".join( [random.choice(string.letters) for i in xrange(6)] )
return digits + chars
def item_upload_to(instance, filename):
file_root, file_ext = os.path.splitext(filename)
date = datetime.now().strftime("%Y/%m/%d")
random_name = generate_random_string() + file_ext
return '/'.join(['user-media',date, random_name])
....
class GenericImage(models.Model):
user = models.ForeignKey(User, default=NEWAVENUE_USER_ID)
original_image = models.ImageField(upload_to=item_upload_to)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1000 次 |
| 最近记录: |