2017-06-22 81 views
0

假設我們有兩個模型,AB。型號A有一個upload_to路徑,在裏面,我也想在同一條路徑上保存模型爲B的字段。這是我想做的事:Django調用模型中的另一個模型的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被定義在模型A。不知道這是否是可能的。 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

我很抱歉,但'getupload = A._meta.get_field(imageA).upload_to' **的內部B **模型給了我一個「'A '沒有'_meta'成員「錯誤。是否有任何額外的步驟使其工作? –

+0

您使用的是哪個版本的django?參數imageA將在引號中。依次從https://docs.djangoproject.com/en/1.11/ref/models/meta/ –

+0

我正在使用最新版本。 imageA在我的代碼中被引用,我忘記包含它們。如果在'model.py'中,我應該輸入** A **嗎? –

相關問題