2017-06-22 10 views
0

Bという2つのモデルがあります。モデルにはupload_toのパスがあり、その内部には、というモデルのフィールドも同じパスに保存したいと考えています。ここで私は何をしたいです:モデル内の別のモデルのupload_toを呼び出す

def random_path(instance, filename): 
    #creating random path each time it's called 

class A(models.Model): 
    imageA = models.ImageField(upload_to=random_path) # Randomly generated path 
    def create_documentfiles(self): 
     imageB = # Image 
     saveImageB = DocumentImage(imagefile=imageB) 
     saveImageB.imagefile.upload_to = # Should be same path as imageA 
     saveImageB.save() 

class B(models.Model): 
    imagefile = models.ImageField() 

私はupload_to=random_pathでBモデルを定義することができますが、それは私に別のパスを与えるだろう。モデルupload_toAで定義されています。それが可能であるかどうかはわかりません。 Djangoのドキュメントには、私が求めているものに類似したものは何も言及されていません。

答えて

1

これは単純です。この目的には_metaを使用してください。あなたのケースでは、get_fieldメソッドを使ってimageAのようなモデルのフィールドを取得することができます。オブジェクト表記を使用して、そのフィールドの属性にアクセスします。

upload_to_attr = ModelName._meta.get_field('foo').upload_to 

より一般的な:

attr_value = ModelName._meta.get_field('foo').attr_name 
+0

私は申し訳ありませんが、** Bの内側 'getupload = A._meta.get_field(imageA).upload_to' **モデルは「「私を与えます'は' _メタ 'メンバ'エラーがありません。それを動作させるための余分なステップはありますか? –

+0

どのバージョンのdjangoを使用していますか? Param imageAは引用符で囲まれます。 https://docs.djangoproject.com/en/1.11/ref/models/meta/ –

+0

最新のバージョンを使用しています。 imageAは私のコードで引用符で囲まれていましたが、私はそれらを含めるのを忘れました。 'model.py'にあれば、** A **をインポートするべきですか? –

関連する問題