我已经尝试解决这个问题几天了,并且可以使用一些外部输入。
为这些相关模型创建表单的最佳方法是什么:
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上发生碰撞,如果我希望在我的应用程序中的不同页面上显示不同的字段,我将必须将模型复制粘贴到新的模型并更改元排除/每个表单对象的字段?
如果有人有任何提示,我将非常感激。
答案 0 :(得分:1)
首先,这太抽象了,无法理解你想做什么。为什么有两个状态字段?不同的关系究竟意味着什么?有什么限制
其次,您对formset感到困惑。首先,没有办法进行多重嵌套的内联表单 - 它们只适用于父级和子级之间的关系 - 您可以有多个父子关系,但不能使用父级 - >孩子 - >孙子,就像你在这里一样。但如果它确实有效,那么不同状态字段之间就不会发生任何冲突 - 它们位于不同的模型上。
第三,没有理由复制和粘贴任何东西。表单集是类,因此您可以轻松地对它们进行子类化并使用不同的exclude
值,甚至可以使用带有__init__
方法的单个类,该方法需要额外的参数来决定要排除的字段。