2016-06-30 68 views
0

我試圖用OneToOneField的反向關係建立在FileFieldupload_to方法的路徑,像這樣:使用反向OneToOne關係在Django的FileField upload_to

def get_upload_path(asset, filename): 
    # Using the reverse relation `game` here 
    return '/'.join([asset.game.slug, filename]) 


class Asset(models.Model) 
    file = models.FileField(upload_to=get_upload_path) 


class Game(models.Model): 
    slug = models.SlugField() 
    menu_image = models.OneToOneField(Asset, related_name='game', null=True, blank=True) 

我可以創造一個有空資產的Game沒問題。當我在管理員中更改遊戲時,如果通過綠色按鈕在菜單圖像中添加新的Asset,則彈出窗口中出現RelatedObjectDoesNotExist錯誤,指示「資產沒有遊戲」。有沒有辦法做到這一點?我發現了一些其他答案,例如herehere,但它在Django 1.9.4上不適用於我。

回答

1

問題是在你的「get_upload_path」功能,因爲你是打電話來asset.game.slug ...但你沒有定義的任何遊戲尚未......

+0

我在「創建遊戲後,在管理員中更改遊戲「頁面。我正在使用綠色的小按鈕來添加資產。 popup沒有將遊戲與未保存的Asset實例關聯起來? –

+0

你必須指定當你保存遊戲時要做什麼......然後保存一個資產...如果你刪除upload_to函數,我相信你沒有問題 –

+0

對,我知道這是問題來自哪裏,我試圖找出是否有辦法實現我想要在Django管理員內部進行的操作。 –