【发布时间】:2015-09-28 06:29:20
【问题描述】:
我开发了一个特定的应用程序,我发现它具有指定的数据库和模型架构。我正在使用 Django 1.8.2 版。下面提出一个问题。不必要的字段已被省略,模型名称是为了示例的目的而发明的,因为我不能透露。考虑以下模型 A 和 B。
class B (models.Model):
name = models.CharField(max_length=100)
class A (models.Model):
name = models.CharField(max_length=100, primary_key=True)
related_name = models.ForeignKey(B, null=True, blank=True)
一个项目在很长一段时间后可能会有几个同名的A,但具有不同的外键B。在这种特殊情况下,我想建模主键“A”由两个字段组成:名称和相关名称。 django中如何创建这样一个包含两个字段的key?
【问题讨论】:
-
是否可以将
A的主键改为django默认的id?这似乎是显而易见的解决办法。 -
嗨 :-) 感谢您的回复。这是一个很好的解决方案,但在我的情况下,许多表都作为外键表“A”,更改为默认 id 将是一个非常大的努力。此外,很多代码使用像'A.objects.get(pk = "something")'这样的查询并改变主键的类型需要大量的工作。出于这个原因,我正在寻找一种不会更改密钥类型的解决方案。基地有很多年了。
-
好的。在那种情况下,我认为这不能在 django 中解决。 Django 要求每个实例有一个唯一的主键。即使您可以使用复合主键,我也不确定当 pk 中的一个字段是可为空的外键时是否是个好主意。
-
你能用
ManyToMany关系代替外键吗?无论如何,听起来这就是您在这种情况下所需要的。 -
我想过,但是模型“A”有额外的字段,这些字段也可能因外键“B”而异。至于这个案子,我必须确定。谢谢:-)
标签: django database postgresql python-2.7 django-models