0

我认为最好用一些简单的模型代码来解释这一点(我是从头开始写的,所以可能存在语法问题——这里不重要):

class Car(models.Model)
    make = models.CharField(...)
    model = models.CharField(...)

class StatisticType(models.Model):
    name = models.CharField(...)

class Statistic(models.Model)
    car = models.ForeignKey('Car')
    stype = models.ForeignKey('StatisticType')
    data = models.CharField(...)

    class Meta:
        unique_together = (('car', 'stype'),)

我们有一辆带有一些硬编码统计数据的汽车,我们有一些数据库控制的统计数据。我可能会添加Colours,Wheel Size等。关键是它可以从管理员编辑,所以我或客户都不需要爬过数据,但它是有限的,所以用户只能选择每个统计数据中的一个(你不能定义“颜色”两次)。

所以我现在正在尝试为此编写数据输入表单,并且我想要一个可以放在页面上的可选模型表单列表。我有最简单的 ModelForm 可能:

class StatisticForm(forms.ModelForm):
    class Meta:
        model = Statistic

棘手的部分(在我的脑海中)是为每个 StatisticType 生成这个 ModelForm 的实例,不管它是否存在。也就是说,如果 Car 对象没有分配颜色,则表单仍会显示。类似地,如果是这样,则该 Statistic 实例将加载到 ModelForm 中。

在我看来,无论是否存在任何给定统计数据的预先存在的实例,我如何生成这些事物的列表?

这似乎应该是一件简单得愚蠢的事情,但周五已经很晚了,一切看起来都很糟糕。

4

1 回答 1

0

听起来您可能想利用内联模型表单集工厂

这将允许您根据需要创建尽可能多的 Statistic 对象实例。如果您需要即时创建 StatisticType 的实例,那就有点不同了。

当 Django 为外键、m2m 或选项字段实例化表单时,它只会接受它认为“有效”的选项,并且如果您使用 JavaScript 添加一个相关模型或选项集中不存在的选项,它会报错服务器端。

因此,如果您需要即时创建 StatisticTypes,然后使用这个新值填充表单集实例,我建议使用Knockout.js。它非常擅长在数据更改时保持大量 DOM 元素同步。

于 2013-02-22T18:30:27.663 回答