如何在模型中使用CompositeForeignKey

时间:2018-08-29 06:05:29

标签: python django foreign-keys

在虚拟环境处于活动状态时,我已经在Anaconda cmd界面中使用pip安装了django-composite-foreignkey。

当我像这样使用CompositeForeignKey时:

PersOrg = CompositeForeignKey(Organisation, on_delete=CASCADE, to_fields={'ClientId', 'OrgCode'})

我收到错误消息:NameError:未定义名称'CompositeForeignKey'

我尝试过:

import django-composite-foreignkey

但收到错误:import django-composite-foreignkey ^ SyntaxError:语法无效。

如何使模型知道CompositeForeignKey的存在?还是有更好的方法来引用多字段外键。

我有一个数据库,多个客户端将在该数据库中进行注册,例如定义自己在组织中工作的员工。

通常,模型将具有以下定义:

class Person(models.Model):
ClientId = models.ForeignKey('clients.Client', on_delete=models.CASCADE,
                             to_field='id')
PersNumber = models.PositiveIntegerField(null=False)
PersSurName = models.CharField(max_length=40, null=False)
PersNames = models.CharField(max_length=40, null=False)
PersIsStaff = models.BooleanField(null=False)
PersMobile = models.CharField(max_length=13)
PersWork = models.CharField(max_length=13, blank=True)
PersEmail = models.EmailField(max_length= 80, blank=True)
PersWorkTitle = models.CharField(max_length=40)
PersOrg = CompositeForeignKey(Organisation, on_delete=CASCADE,
                                to_fields={'ClientId', 'OrgCode'})

class Meta:
    unique_together = (('ClientId', 'PersNumber'),)

def __str__(self):
    """Return a string representation of the model"""
    return str(self.PersNumber) + ' - ' + self.PersSurName + ' - ' + self.PersNames

在每个模型中,将都有一个客户端ID和一个(或多个)其他唯一字段。

如上例所示,PersOrg字段是表“ Organisation”的外键,其中“ ClientId”,“ OrgCode”字段定义了外键。

已经在此论坛上提出并回答了问题,但我无法使用CompositeForeignKey。

我们将不胜感激

此致

Phlip

1 个答案:

答案 0 :(得分:1)

django-composite-foreignkey是项目的名称,但是Python包的名称是compositefk,如test app所示。因此,您的导入应为:

from compositefk.fields import CompositeForeignKey

我认为这是一个很奇怪的错误,但是看着the documentation他们实际上并没有显示导入内容,因此我认为可以说文档使您失望。

请注意,Python标识符不能包含-,这就是语法错误的原因。