2010-11-27 31 views
2

我想在調用save方法之前在Django中創建一個對象。這個對象將從一個ForeignKey值創建,我已經將foreignkey字段更改爲輸入字段,以便寫入值而不是選擇它。在調用save方法之前創建一個對象

我有兩個班在2個不同的模型文件

class Category(models.Model): 
    title = models.ForeignKey(Title, verbose_name="Title")

class Title(models.Model): 
    title = models.CharField("Title", primary_key=True, max_length=200)

當我創建一個類,我要挑或寫已經存在於數據庫中,當一個標題我嘗試創建一個帶有新標題的類別我收到此錯誤:

Select a valid choice. That choice is not one of the available choices.

我想要做的是根據我在ForeignKey字段中寫入的內容創建標題,然後創建類別,以便立即使用它。

我試圖重新定義保存方法來保存標題對象之前保存類別,但它沒有奏效。

任何幫助將非常感激。

謝謝

回答

-1

你或許應該考慮把代碼中的模型管理器創建類別條目:

class CategoryManager(Manager): 
    def create_category(category, title): 
     t = Title.objects.get_or_create(title=title) 
     return self.create(title=t) 

class Category(models.Model): 
    title = models.ForeignKey(Title, verbose_name="Title") 
    objects = CategoryManager() 

然後每當你想創建一個類別時使用create_category。

1

謝謝你的代碼,我剛剛測試過它。但這不是我正在尋找的東西,我會解釋我想要做什麼。

假設我們的模型中有Category和Article類,每個類都有一個標題。爲了使這個標題可重用,我創建了另一個應用程序來管理字段,我創建了類Title,並將它添加爲Category和Article窗體的外鍵。

我使用raw_id_fields將選擇框切換到輸入字段。

現在,當我創建一個類別或一篇文章時,我必須選擇或寫一個標題,當這個標題存在時,它完美的工作,但是當它不存在時,我想在創建類別之前創建它,可以使用它。

我試圖在保存方法,pre_save信號和乾淨的方法中做到這一點,但我總是得到錯誤「選擇一個有效的選擇。該選擇不是可用的選擇之一。「

我正在使用硬編碼的解決方案來創建標題,我只想看看它是否可以工作,這些是我在創建類別之前使用不同方法創建標題的行:

t = Title(title = "MyTitle") 
t.save()

我試圖創建MyTitle作爲冠軍的範疇,但我得到了同樣的錯誤,當我嘗試使用現有的標題就可以創建一個又一個,它的工作原理和標題「MyTitle」被創建。這意味着,創建對象發生在表單驗證之後,我想要的只是之前做的事情,標題對象應該在驗證之前創建,

非常感謝您的幫助

相關問題