2011-11-18 9 views
15

のDjangoストアのユーザーイメージモデルに登録ユーザーのイメージを格納するフィールドを作成しようとしています。 この画像の名前を変更し、media/users/10/photo.jpegのような別のユーザーディレクトリに保存する必要があります。モデルに

私は多くを検索しましたが、それをきれいに正しく行う方法がまだ見つかりませんでした。多くのサイトが同じ機能を必要とし、これはdjangoのドキュメントにあるはずですが、そうではありません。

+0

ますすべてのユーザーIDのディレクトリを作成していますか?どうして 'media/users/10.jpeg'?ちょうど質問:D –

+0

保存する他のユーザー関連のコンテンツがある可能性があります:) – dragoon

+0

ああ私が参照してください!私は私が助けることができるかどうか私に見せてくれる同様の問題に直面したと思います –

答えて

35

あなたは、これは私のプロジェクトから直接コードであるImageField

#models.py 
import os 

def get_image_path(instance, filename): 
    return os.path.join('photos', str(instance.id), filename) 

class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    profile_image = ImageField(upload_to=get_image_path, blank=True, null=True) 

の「upload_to」オプションを使用します。アップロードされた画像は、あなたが望むもののために/MEDIA_ROOT/photos/<user_id>/filename

に行き、ちょうどここでdef get_image_path

に「ユーザー」と「写真」という文字列を変更ですFileField詳細下のドキュメントでそれについての小さなビット、

+0

これは実際には正しい場所にファイルを保存しますが、テンプレート '' {{user.profile_image}} 'で何らかの理由で'/users/users/40/photo.png'を ' '/ media/users/40/photo.png'' – dragoon

+1

残念ながら、' '{{user.profile_image.url}}' ' – dragoon

+3

models.ForeignKey(User、unique = True)を使用してください。 はmodels.OneToOneField (ユーザー) – vinyll

0

ユーザーモデルに外部キーを持つモデルを作成する必要があります。このモデルでは、ユーザーにimage fieldを割り当てることができます。ユーザーモデル自体を変更することはお勧めしません。

+2

申し訳ありませんが、問題はモデルについてではなく、それは画像を保存する方法です。 – dragoon

+1

任意のFileFieldまたはImageフィールドの動的アップロードパスを作成できます。モデルにupload_toのパスを返す関数を追加するだけです。 Djangoのドキュメントの例はhttps://docs.djangoproject.com/en/1.3/ref/models/fields/#filefield – Brandon

+1

ですが、最高の答えではありませんが、投票の価値はありません... – nicorellius

関連する問題