Django:跨表的唯一ID
Django: Unique ID's across tables
我很好奇是否有一个很好的解决方案来实现表之间的唯一 ID。
class Voice(models.Model):
id = .. <------|
slug = ... |
name = .... |-- No duplicate IDs
|
class Group(models.Model): |
id = .. <------|
slug = ...
name = ....
我希望当我在视图中获得 ID 时,从一个模型中选择会给我 None 但另一个总是 return 对象(反之亦然)。如果有更好的方法欢迎分享。现在我正在使用 slug+id 作为查询过滤器,但我想放弃它。
我不太担心唯一 ID,而是考虑数据模型关系。从你所说的来看,这听起来像是两者之间的共性,并且该模型可以有与之关联的语音、组或两者。
class NewCommonModel(models.Model):
# common fields go here.
class Voice(models.Model):
new_common_model = models.OneToOneField(NewCommonModel, on_delete=models.CASCADE)
# voice specific fields
class Group(models.Model):
new_common_model = models.OneToOneField(NewCommonModel, on_delete=models.CASCADE)
# group specific fields
将 id 定义为 IntegerField 而不是 auto。 Voice 总是有偶数作为 id,而 Group 总是奇数。这样你甚至可以提前知道你应该寻找哪种型号
我建议使用 uuid 作为主键。解决你的独特问题,混淆你的 pk,在宇宙中是独一无二的,并且也内置在 django 中。
既然你提到了 slug,有很多方法可以让每个模型都有一个独特的 slug,你永远不需要用 pk 制作复合键。或者,出于美观原因,您可以将 slug 包含在 url 中,并仅在您的视图中过滤 pk,它应该始终是唯一的。
但通常情况下,在两个模型中具有相同的 pk 应该不是真正的问题,并且在不了解更多的情况下,我会担心你在做一些奇怪的事情。
我很好奇是否有一个很好的解决方案来实现表之间的唯一 ID。
class Voice(models.Model):
id = .. <------|
slug = ... |
name = .... |-- No duplicate IDs
|
class Group(models.Model): |
id = .. <------|
slug = ...
name = ....
我希望当我在视图中获得 ID 时,从一个模型中选择会给我 None 但另一个总是 return 对象(反之亦然)。如果有更好的方法欢迎分享。现在我正在使用 slug+id 作为查询过滤器,但我想放弃它。
我不太担心唯一 ID,而是考虑数据模型关系。从你所说的来看,这听起来像是两者之间的共性,并且该模型可以有与之关联的语音、组或两者。
class NewCommonModel(models.Model):
# common fields go here.
class Voice(models.Model):
new_common_model = models.OneToOneField(NewCommonModel, on_delete=models.CASCADE)
# voice specific fields
class Group(models.Model):
new_common_model = models.OneToOneField(NewCommonModel, on_delete=models.CASCADE)
# group specific fields
将 id 定义为 IntegerField 而不是 auto。 Voice 总是有偶数作为 id,而 Group 总是奇数。这样你甚至可以提前知道你应该寻找哪种型号
我建议使用 uuid 作为主键。解决你的独特问题,混淆你的 pk,在宇宙中是独一无二的,并且也内置在 django 中。
既然你提到了 slug,有很多方法可以让每个模型都有一个独特的 slug,你永远不需要用 pk 制作复合键。或者,出于美观原因,您可以将 slug 包含在 url 中,并仅在您的视图中过滤 pk,它应该始终是唯一的。
但通常情况下,在两个模型中具有相同的 pk 应该不是真正的问题,并且在不了解更多的情况下,我会担心你在做一些奇怪的事情。