创建复杂的django表单

时间:2010-12-06 09:29:32

标签: django django-models django-forms

我已经尝试解决这个问题几天了,并且可以使用一些外部输入。

为这些相关模型创建表单的最佳方法是什么:

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()

我开始关注Formsets,但我真的不明白使用它们的意义。
如果我使用ModelForms,状态字段将在ModelA和ModelC上发生碰撞,如果我希望在我的应用程序中的不同页面上显示不同的字段,我将必须将模型复制粘贴到新的模型并更改元排除/每个表单对象的字段?

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

1 个答案:

答案 0 :(得分:1)

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

其次,您对formset感到困惑。首先,没有办法进行多重嵌套的内联表单 - 它们只适用于父级和子级之间的关系 - 您可以有多个父子关系,但不能使用父级 - >孩子 - >孙子,就像你在这里一样。但如果它确实有效,那么不同状态字段之间就不会发生任何冲突 - 它们位于不同的模型上。

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