0

画像の URL を /img/1 と /img/2 にしたいのですが、すべてのモデルに割り当てられた自動インクリメント ID を使用するのが最適で、すべての URL が異なるようになると考えました。問題は、モデルのインスタンスが保存される前に ID を持っていないことです。これは、models.py の以下のコードの問題です。

def update_filename(instance, filename):
    a = type(instance.id)
    if a is not int:
        a = 1
    else: 
        a = instance.id
    path = "img" + "/" + str(a) + ".jpg"
    return path

class User_Image(models.Model):
    image = models.ImageField(upload_to=update_filename) 

これを修正する方法について何か提案はありますか? django が画像を保存するときのすべてのインスタンスの ID は None であるため、すべての画像は img ディレクトリに "None" または "None_1" などとして保存されます。

4

1 に答える 1

0

できません。ドキュメントから:

ほとんどの場合、このオブジェクトはまだデータベースに保存されていないため、デフォルトの AutoField を使用する場合、主キー フィールドの値がまだない可能性があります。

私は次のような関数を使用します:

import uuid
def update_filename(instance, filename):
    """ Rename picture """

    extension = os.path.splitext(filename)[1]
    return 'img/%s%s' % (uuid.uuid4(), extension) 
于 2013-01-24T08:09:15.390 に答える