2011-06-08 91 views
1

我有目標了一些Django的對象是這樣的:Django的ModelField一個對象,它是ForgeinKeys的其他對象

class Award(Model): 
    name = CharField(...) 
    date = DateTimeField(...) 


class Book(Model): 
    name = CharField(...) 
    award = ForgeinKey(Award, blank=True) 

(即每一本書可能會或可能不會有一個獎)

我想製作添加/編輯獎項的表單。假設已經創建了很多書籍。起初,我創造了這樣一個的ModelForm:

class AwardForm(ModelForm): 
    class Meta: 
     model = Award 

它創造了一個正確的形式與所有的數據,但是沒有辦法,將圖書添加獎(或紀念這一裁決適用於被選中的書) 。

我要手動一個ModelMultipleChoiceField添加到AwardForm(與該圖書中查詢集),然後添加邏輯來is_valid,將檢查中選定的書籍,並添加了一些save要經過選擇的書籍和將該對象上的forgein鍵設置爲該對象。

但是,是否有一個很好的'Django'方法來自動執行此操作?即只是添加一個特定的領域的形式,這將做到這一切呢?如果我要將Book.award更改爲Award.books的許多關鍵功能,它可能會自動完成所有這些工作,但我喜歡將其作爲本書的一個僞造鍵的內部邏輯。

回答

0

我只是建議使用Inline's,但是在重新閱讀您的問題時,難點在於選擇已存在的對象並將它們鏈接到您正在編輯的Award。

您建議的方式是我會這麼做的第一種方式,而我能想到的唯一方法就是通過黑客入侵您的AwardAdmin中的某些方法來添加您所需的功能。

雖然使用ModelMultipleChoiceField看起來很乾淨,但實際上這樣做很乾淨,特別是因爲你不應該真的需要太多/任何對save方法的編輯,因爲該字段應該處理它本身?

相關問題