【发布时间】:2017-11-22 06:33:11
【问题描述】:
我想为模型中的每个选项组合维护一个具有唯一 ID 的 Django 模型。然后,我希望能够使用新字段更新模型,并且不会更改以前的唯一 ID。 id 可以是散列或整数或任何东西。 实现这一目标的最佳方法是什么?
class MyModel(models.Model):
WINDOW_MIN = 5
WINDOW_MAX = 7
WINDOW_CHOICES = [(i,i) for i in range(WINDOW_MIN - 1, WINDOW_MAX - 1)]
window = models.PositiveIntegerField('Window', editable=True, default=WINDOW_MIN, choices=WINDOW_CHOICES)
is_live = models.BooleanField('Live', editable=True, default=False)
unique_id = ....
鉴于上述示例,将有 3 * 2 == 6 个唯一 ID。如果我添加另一个可编辑的布尔字段,我不想更改以前的唯一 ID,但我希望为新的布尔字段生成新的唯一 ID。
这背后的思考过程是 MyModel 中的参数定义函数的输入,该函数的结果通过 unique_id 和模型名称存储在另一个 Django 模型 MyResultModel 中。这背后的原因是MyModel 有多个变体,每个变体都有自己设置的唯一组合,这些组合会定期更新,但 MyResultModel 中的结果集在 MyModel1 到 MyModelN 之间是相同的。理想情况下,我希望自动生成 unique_id。换句话说,存储在MyResultModel 中的结果集的键是model_name (MyModel) 和unique_id。我想明智地管理这么多 (MyModel1,...MyModelN) 对一 (MyResultModel) 的关系。
class MyResultModel(models.Model):
unique_id = ...
model_name = models.CharField(max_length=200, default='', blank=False) # Points to a Django Model ex MyModel
result1 = ...
result2 = ...
【问题讨论】:
-
这对我来说就像XY problem。你这样做是为了达到什么目的?
-
@Chris 我将添加更多信息,说明为什么我认为上述内容是有道理的。
-
我同意@Chris 的评论,不过,我会尽量回答。
-
@Chris 我添加了很多,让我知道这是否有意义,或者我是否以完全错误的方式考虑这个问题。
-
我的意思是你会做这样的事情:
MyResultModel.objects.get(model_name='MyModel', unique_id=MyModel.objects.get(window=6, is_live=True).id).
标签: python django django-models