0

私のプロジェクトでは、学校モデルと学校提案モデルを備えたアプリがあります。

学校モデルには、ロゴ、シールなど、さまざまな画像のフィールドがあります。

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)

学校の提案が承認されたら、save を上書きして、関連する学校のフィールドを getattr(field_name) 経由で取得し、setattr(field_name, image_field) で設定するようにしました (構文は簡略化していますが、お分かりいただけると思います)。

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

では、これを行うにはどうすればよいですか?何らかの方法で属性の upload_to 値を取得し、そのファイルパスで画像を再保存し、再保存した画像で setattr を使用できることは理にかなっていますが、最初の 2 つの方法がわかりません。

4

1 に答える 1

1

アップロードをこの関数に変更し、クラス定義の上のファイルに含めました。

def get_upload_to(instance, filename):
    return School._meta.get_field(instance.field_name).upload_to+"/"+filename
于 2012-04-26T17:01:31.167 に答える