以下是一些django模型:
class User (Model):
name = CharField (max_length=100)
class ThingVersion (Model):
timestamp = DateTimeField (auto_now_add = True)
class ThingPartition (Model):
version = ForeignKey (ThingVersion)
partition_number = IntegerField ()
class UserInPartition (Model):
user = ForeignKey (User)
version = ForeignKey (ThingVersion)
partition_number = IntegerField ()
class Meta:
unique_together = (('user', 'version'))
我故意不做“显而易见”的事,就是这样
class UserInPartition (Model):
user = ForeignKey (User)
partition = ForeignKey (ThingPartition)
因为我需要 unique_together
约束,如果使用更规范化的 partition = ForeignKey (ThingPartition)
接近。
我该如何表达 UserInPartition.(version,partition_number)
pair是 ThingPartition
?
或者,有没有一种方法可以使用 partition = ForeignKey (ThingPartition)
接近并约束 UserInPartition
模型只有一个 partition_number
每 (user,version)
?
1条答案
按热度按时间xwbd5t1u1#
我试着理解你想要达到的目标,从而提供更好的答案。为什么在用户分区和thingpartition上都有分区号?
但你能做的是把分区变成多对多关系的直通模型。
https://docs.djangoproject.com/en/2.0/ref/models/fields/#django.db.models.manytomanyfield.through
基本上,使用through模型可以完全满足您的需要-
有一个模型,在这个模型中,您指的是分区中的用户、分区号和版本
对该模型中的所有3个对象一起强制唯一
基本上,您的设置如下所示:
基于我有限的知识,那将是我最好的报价。