0

嗨,我在 django 3.2 中遇到了复合键的工作问题。根据我的客户要求,他需要一个复合键作为主键,而不仅仅是在 unique_together 约束上,所以我想知道是否有任何方法或地方可以在验证之前拦截实例并用来自其他字段的值填充复合键并将其保存到数据库ej:

class MyModel(models.Model):
   foo = models.UUIDField(default=uuid.uuid4,
                          auto_created=True, editable=False, max_length=36)
   bar = models-charfield()
   taz = models.charfield()
   composite_key = models.charfield(primary_key=True, default = 'foo' + 'taz' + 'foo')

在这些行中,我无法从 django 管理站点上的表单字段验证器中获得通过,所以我真的无法测试信号或 save() 方法,任何帮助都将不胜感激。

4

1 回答 1

0

尝试这个:

class MyModel(models.Model):
   foo = models.UUIDField(default=uuid.uuid4,
                          auto_created=True, editable=False, max_length=36)
   bar = models.charfield()
   taz = models.charfield()
   composite_key = models.charfield(primary_key=True)

   def save(self, *args, **kwargs):
      self.composite_key = self.foo
      if self.bar:
         self.composite_key += self.bar
      if self.taz:
         self.composite_key += self.taz
      super(Model, self).save(*args, **kwargs)
于 2021-12-28T13:08:39.140 回答