2014-02-18 3 views
0

Я использую Django 1.5, и хочу, чтобы пользователи могли загружать фотографии. Я хочу, чтобы фотографии были сохранены в другом месте в зависимости от того, какой идентификатор пользователя. Например, если пользователь загружает файл, а идентификатор пользователя - 1 (идентификатор/уникальный первичный ключ, присвоенный каждому пользователю, когда пользовательский объект создается из общей модели пользователя Django), я хочу, чтобы изображение сохранялось в СправочникDjango - имеет разные MEDIA_ROOT для разных пользователей

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? 

я прав? Или это совсем другое, чем то, что я думаю?

Edit: мой forms.py это:

class UploadImageForm(forms.Form): 
    image = forms.ImageField() 

ответ

1

Если вы хотите использовать идентификатор пользователя, вы можете создать функцию, чтобы загрузить изображение как так:

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.

Edit:

Для вашего использования формы можно сделать:

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'] 
+0

гм о порядке , но когда вы делаете «upload_to = get_file_path», не get_file_path() принимает два параметра? Что такое экземпляр и имя файла и как функция get_file_path() знает, что они есть, даже если она не предоставляется upload_to = get_file_path? – user2719875

+1

'' 'instance''' является экземпляром класса UserImages, который сохраняется, а имя файла - это имя файла, который сохраняется в свойстве фотографии. – schillingt

+0

hm okay Я просто добавил свои forms.py в свой пост. На мой взгляд, если я делаю «user = request.user», а затем «UserImages.objects.create (user = user, photo = form.cleaned_data ['image']», то он автоматически добавит изображение в userID/uploadedPhotos/filename? – user2719875

Смежные вопросы