我正在使用Django 1.5,我希望用户能够上传照片。我希望照片存储在不同的位置,具体取决于用户ID。因此,例如,如果用户上传文件并且用户ID为1(当从Django通用用户模型创建用户对象时为每个用户提供ID /唯一主键),那么我希望将图像保存在目录
myPorjectFolder/myApp/static/site_media/images/1(the users ID)/uploadedPhotos
这就是我认为我应该这样做的方式。在settings.py中,添加以下行:
MEDIA_ROOT = '/home/userName/myProject/myApp/site_media/static/images/'
然后在models.py中创建如下模型:
from django.db import models
from django.contrib.auth.models import User
class UserImages(models.Model):
user = models.OneToManyField(User)
photo = models.ImageField(upload_to=currentUsersID/uploadedPhotos) #I know this won't work.. how would I make it work?
我是对的吗?或者它的完成方式与我的想法完全不同?
编辑:我的forms.py是这样的:
class UploadImageForm(forms.Form):
image = forms.ImageField()
答案 0 :(得分:1)
如果您想使用用户的ID,您可以创建一个上传图像的功能,如下所示:
def get_file_path(instance, filename):
return os.path.join('%s/uploadedPhotos' % instance.user_id, filename)
然后在你的模型的ImageField中你会做
class UserImages(models.Model):
user = models.ForeignKeyField(User)
photo = models.ImageField(upload_to=get_file_path)
另请注意,我使用ForeignKeyField作为用户属性。没有OneToManyField,只有ForeignKey,OneToOne和ManyToMany。
编辑:
对于您的表单用法,您可以执行以下操作:
form = UploadImageForm(request.POST)
form.instance.user = request.user
user_image = form.save()
但您需要将forms.py修改为以下内容:
class UploadImageForm(forms.ModelForm):
class Meta:
model = UserImages
fields = ['photo']