0

我在 Django 中有以下模型

class params(models.Model):
    name = models.CharField(max_length=30, default = 'no_name')
    cs_n = models.IntegerField(default=16)
    alt_n = models.IntegerField(default=2)
    opt_out = models.BooleanField(default=1)
    at_n = models.IntegerField(default=4)

我想创建一个具有与 at_n 一样多的字段的新模型。例如,如果用户在 at_n 中输入“4”,我希望它自动创建:

class params(models.Model):
    at_1 = models.IntegerField(default=2)
    at_2 = models.IntegerField(default=2)
    at_3 = models.IntegerField(default=2)
    at_4 = models.IntegerField(default=2)

谢谢

4

1 回答 1

0

这可能不是一个好的数据模型,因为 Django 模型旨在密切镜像数据库表。例如,您不希望动态更新数据库中表的 DDL,因为这样做会使您面临弄乱所述表中已经存在的数据的风​​险。

相反,我认为这将是您重新评估数据模型的更好方法。

例如,如果您尝试将这些属性绑定到一个主要对象,则为该主要对象制作一个模型,然后为主要对象属性/值制作一个单独的模型。

从那里,您可以使用视图逻辑来实际验证分配给特定主对象的适当数量的属性。

我在想这样的事情:

class MainModel(models.Model):
    ....
    {Your main model attributes}
    at_n = models.IntegerField(default=4)
    ....


class MainModelAttributes(model.Model):
    main_model = models.ForeignKey(MainModel)
    attr_value = models.IntegerField()

然后在您的 views.py 文件中,您可以使用逻辑来确保 MainModelAttributes 模型上的属性数量与 MainModel.at_n 中存储的数量相匹配。

于 2021-01-29T00:59:29.170 回答