2012-04-17 8 views
2

私はDjangoの管理上の.jpg

ので/path/{self.id}.jpgとして保存すべき画像をアップロードできるようにジャンゴの管理者を必要としますこれまで私は、ID、状態、タイトルフィールドを持つデータベースとID、ステータス、タイトル、THUMBのフィールドを持つモデルがあります:

class MEL(models.Model): 
    id = models.AutoField(primary_key=True, editable=False) 
    status = models.IntegerField(choices=((0, 'inactive'), (1, 'active')), default=1) 
    title = models.TextField(verbose_name='Título') 
    thumb = models.ImageField(upload_to=upload_path) 

    class Meta: 
     db_table = u'MEL' 

問題は、画像が保存されているモデルに以前にアップロードされていることであるので、私はすることができますこの時点で「self.id」に保存しないでください。 私は、/ tmpに/ {UUID}にそれを救うことができると思うし、それはおそらく何かのように、ポストセーブリネーム:それはそれの名前を変更後、保存し、/ tmp/

からそれを削除し、その後

def upload_path(self, filename): 
    self.file_uuid = uuid.uuid4() 
    return '/tmp/' + self.file_uuid 

それとも私が)(最初の呼び出しのスーパーにこのモデルのsave()メソッドをオーバーライドしてみてください。(ImageFieldFileオブジェクトである)画像のアップロードを処理し、その後、)(保存して

提案をself.idに名前を変更?

ありがとう

+0

[現在のモデルIDとDjangoの管理ファイルアップロード]の可能複製(http://stackoverflow.com/questions/9968532/django-admin-file- upload-with-current-model-id) – Ajoy

+0

これはこの問題に対する最善の[解決方法](http://stackoverflow.com/a/15776267/1761793)です。 – Ajoy

答えて

-1

upload_toを使用してファイル名を変更できるはずです。 https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.FileField.upload_to

そのリンクの下に第三段落は、この言う:「これはまた、呼び出される関数として、呼び出し可能であり、私はプロジェクトでそれを行っているとDjangoのドキュメントがそう言うので、私はこれを言いますファイル名を含むのアップロードパスを取得します。 [強調が追加されました]。私は皮肉っているつもりはありません。私はこれが可能であることを示しているだけで、何か他のことが起こっているはずです。

このようなものを試してみてください。問題は、拡張子をオフに残していたことが考えられます。

def upload_path(self, filename): 
    basename, extension = os.path.splitext(filename) 
    return '/'.join(["path",("%s%s" % (self.id, extension))]) 
+1

'self.id'はモデルがまだ保存されていないので' None'です – Ajoy