gpt4 book ai didi

mysql - 如何在 Django 中将外键表示为一对?

转载 作者:行者123 更新时间:2023-11-29 17:26:24 25 4
gpt4 key购买 nike

以下是一些 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) 对是 ThingPartition 的外键?

Alternatively, is there a way to use the normalized partition = ForeignKey (ThingPartition) approach and constrain the UserInPartition model to only have one partition_number per (user,version)?

最佳答案

我正在尝试了解您想要实现的目标,以便提供更好的答案。为什么分区和事物分区中的用户都有分区号?

但是您可以做的是将 ThingPartition 转换为多对多关系的 Through 模型。

https://docs.djangoproject.com/en/2.0/ref/models/fields/#django.db.models.ManyToManyField.through

基本上使用 through 模型将完全满足您的要求 -

  • 有一个模型,其中引用分区中的用户、分区号和版本
  • 对该模型中的所有 3 件事强制执行唯一性

基本上,您的设置如下所示:

class User (Model):
name = CharField (max_length=100)
something_that_makes_sense = ManyToManyField(ThingVersion, through=ThingPartition)

class ThingVersion (Model):
timestamp = DateTimeField (auto_now_add = True)

class ThingPartition (Model):
user = ForeignKey (User)
version = ForeignKey (ThingVersion)
partition_number = IntegerField ()

class Meta:
unique_together = ('user', 'version', 'partition_number')

根据我有限的知识,这将是我最好的报价。

关于mysql - 如何在 Django 中将外键表示为一对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50944011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com