【发布时间】:2020-11-12 00:48:30
【问题描述】:
我想防止在我的数据库的某些表上创建重复的行。
我知道一种方法是将模型的Meta 类中的unique_together 或constraints 属性设置为带有字段名称的元组,但我想知道是否有更好的方法这样做是因为我的模型有 30 多个字段,所以我认为再次重复它们的名称是不切实际的。
我现在的样子:
class MyModel(models.Model):
model_id = models.BigAutoField(db_column="MyModelColumnID", primary_key=True)
field1 = models.BooleanField(...)
field2 = models.CharField(...)
field3 = models. ...
.
.
.
field34 = models. ...
class Meta:
db_table = "MyTableName"
unique_together = (
"field1",
"field2",
"field3",
.
.
.
"field34"
)
我正在寻找类似 @987654327@ 或 all_unique=True 的东西,这在 Django 上是否可行?
将其作为数据库约束处理对我来说很重要,get_or_create 方法是不够的,因为它适用于使用多个线程并对数据库进行多个并发调用的应用程序。谢谢!
【问题讨论】:
-
据我所知,没有这样的事情。 所有字段一起是唯一的(并且模型有34个字段)也有点奇怪。 :)。通常可以在一个单独的模型中将字段“分组”在一起(例如
Address,它是Profile的一部分)。这导致可重用组件。 -
@WillemVanOnsem 就像不允许表格上出现重复行一样。这些字段中的大多数实际上是 ForeignKeys 和其他关系字段,无论如何,即使是 12 个字段或 8 个字段,我只想知道是否有办法在 Django 上这样做,所以我不必重复所有字段再次建模。
标签: python sql django database