2010-12-06 76 views
0

我试图解决这个问题几天,现在可以使用一点外部输入。创建复杂的Django表格

什么是创造这些相关模型形式的最佳方式:

STATUSES = (('1', 'Draft'), ('2', 'Active'), ('3', 'Deleted'), ('4', 'Credited')) 
class Contract(models.Model): 
    details = ForeignKey(Order) 
    status = CharField(max_length=1, choices=STATUSES) 

class Product1Order(Order): 
    items = ManyToManyField(Item) 
    # + more product specifics 

class Item(models.Model): 
    tag = ForeignKey(Tag) 
    status = CharField(max_length=1, choices=STATUSES) 
    price = PositiveIntegerField() 

我开始寻找到表单集,但我不能真正理解他们使用此点。
如果我使用ModelForms,那么状态字段将在ModelA和ModelC上发生冲突,如果我想在应用程序的不同页面上显示不同的字段,则必须将模型复制粘贴到新的模型中,并将Meta每个表单对象排除/字段?

如果有人有任何提示,我会非常感激。

回答

1

首先,这太抽象了,无法理解你想要做什么。为什么有两个状态字段?不同的关系究竟意味着什么?有什么限制

其次,你对模板组感到困惑。首先,没有办法使用嵌套内联表单 - 它们只适用于父级和子级之间的关系 - 您可以有多个父 - 子关系,但不能像父级 - >子级 - >孙级那样在此处执行。但是,如果它确实有效,那么不同地位领域之间就不会有任何冲突 - 它们在不同的模型上。

第三,没有理由复制和粘贴任何东西。 Formset是类,因此您可以轻松对它们进行子类化并使用不同的exclude值,甚至可以使用带有__init__方法的单个类,该方法需要一个额外的参数来决定要排除的字段。

+0

改变了一下例子,它有帮助吗?对ModelForm进行子类化远不能复制粘贴原始模型表单imho?至少不会因为不同的排除项/字段而发生细微的更改,如果能够在初始化时更改此值,那么将会非常好:f = MyModelForm(exclude =('field1','field2')) – schmilblick 2010-12-06 10:31:28