Как использовать CompositeForeignKey в модели - PullRequest
0 голосов
/ 29 августа 2018

Я установил django-композитный-foreignkey с помощью pip в интерфейсе cmd Anaconda, когда виртуальная среда активна.

Когда я использую CompositeForeignKey, как это:

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

Я получаю сообщение об ошибке: NameError: имя 'CompositeForeignKey' не определено

Я пробовал:

import django-composite-foreignkey

но получите ошибку: import django-смесь-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

В каждой модели будут идентификатор клиента и одно (или несколько) других полей, которые являются уникальными вместе.

Как и в примере выше, поле PersOrg является внешним ключом для таблицы «Organization», где поля «ClientId», «OrgCode» определяют внешний ключ.

Вопрос был задан и получен ответ на этом форуме, но я не могу заставить CompositeForeignKey работать.

Помощь будет оценена

С уважением,

Phlip

1 Ответ

0 голосов
/ 29 августа 2018

django-composite-foreignkey - это имя проекта, но имя пакета Python - compositefk, как видно из тестового приложения . Таким образом, ваш импорт должен быть:

from compositefk.fields import CompositeForeignKey

Я думал, что это было странной ошибкой, но, глядя на документацию , они фактически никогда не показывают импорт, поэтому я думаю, будет справедливо сказать, что документация вас здесь подвела.

Обратите внимание, что идентификаторы Python не могут содержать -, поэтому вы получили синтаксическую ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...