2012-04-26 5 views
0

私のプロジェクトでは、学校モデルと学校卒業モデルを持つアプリがあります。djangoはsetattrを使ってイメージファイルの場所を変更します

seal_image = models.ImageField(upload_to="sealimgs", null=True, blank=True) 
logo_image = models.ImageField(upload_to="logos", null=True, blank=True) 

schoolsuggestionモデルは、対応する学校のフィールドが何であるかのためのフィールドを有し、イメージフィールド:

学校モデルはロゴ、シールなどのような様々な画像のためのフィールドを、有しています。

学校の提案が承認され
field_name = models.CharField(max_length=255, default="") 
image_field = models.ImageField(upload_to='img', null=True, blank=True) 

それがGETATTR(FIELD_NAME)を介して関連する学校のフィールドを取得し、SETATTR(FIELD_NAME、image_field)とそれを設定するように、私は(私は構文を簡素化していたセーブ上書きしますが、あなたはその考えを得る)。

問題は、私がsetattrを使用していてイメージフィールド固有の保存ではなく正しいディレクトリにアップロードしているため、ファイルがまだimgに保存されているということです。

どうすればいいですか?何らかの形で属性のupload_to値を取得し、そのファイルパスでイメージを何らかの形で保存してから、resavedイメージでsetattrを使用することはできますが、最初の2つの方法を理解することはできません。

答えて

1

私は、この関数ににアップロードを変更し、クラスDEF上記のファイルに含ま:

def get_upload_to(instance, filename): 
    return School._meta.get_field(instance.field_name).upload_to+"/"+filename 
+0

だからあなたの問題は右、インスタンスがモデルフィールドの代わりに、インスタンスフィールドの値にアクセスする方法ですか? – okm

+1

もしそうなら、あなたの解決策は問題ありません。 'os.path.join'を使ってパスを連結してください。 – okm

関連する問題