2011-06-08 93 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方法的编辑,因为该字段应该处理它本身?

相关问题