Ошибка Django UniqueConstraint в отношениях с внешним ключом

Я действительно застрял на этом вопросе.

Мне нужно импортировать в мое веб-приложение django существующую базу данных. У меня возникла проблема с установкой внешних отношений между IrmaTblcardpoc и IrmaTblcardstreet, зная, что mykey и streetid являются "составными ключами".

Я получил следующую ошибку:

myapp.IrmaTblcardpoc.street: (fields.E311) 'IrmaTblcardstreet.streetid' должен быть уникальным, поскольку на него ссылается внешний ключ.

К сожалению, это немного выше моей зарплаты. Что я делаю не так?

class IrmaTblunit(models.Model):
    mykey = models.CharField(db_column='myKey', primary_key=True, max_length=50)

    def __str__(self):
        return self.id
#...
class IrmaTblcardstreet(models.Model):
    mykey =  models.ForeignKey(IrmaTblunit, on_delete=models.CASCADE)
    streetid = models.CharField(db_column='StreetID', max_length=100)

    class Meta:
        constraints = [
            models.UniqueConstraint(fields=['mykey', 'streetid'], name='unique_mykey_streetid')
        ]

    def __str__(self):
        return self.mykey + self.streetid

class IrmaTblcardpoc(models.Model):
    mykey =  models.ForeignKey(IrmaTblunit, on_delete=models.CASCADE, related_name='children')
    pocid = models.CharField(db_column='POCID', max_length=100, blank=True, null=True)  
    cardid = models.BigIntegerField(db_column='CardID', blank=True, null=True)
    streetid = models.ForeignKey(IrmaTblcardstreet, on_delete=models.CASCADE, to_field='streetid', db_column='streetid', related_name='poc_streets'

    class Meta:
        db_table = 'irma_tblCardPOC'
        constraints = [
            models.UniqueConstraint(fields=['mykey', 'streetid', 'pocid'], name='unique_mykey_pocid')
        ]

    def __str__(self):
        return self.mykey + self.pocid

class IrmaTblcardstreet(models.Model):
    ...
    streetid = models.CharField(db_column='StreetID', max_length=100)


class IrmaTblcardpoc(models.Model):
    ...
    streetid = models.ForeignKey(IrmaTblcardstreet, on_delete=models.CASCADE, to_field='streetid', db_column='streetid', related_name='poc_streets'

Вы пытаетесь добавить внешний ключ, который является неуникальным полем. Если вам нужно связать эти модели, используйте to_field='pk' и удалите db_column или даже не используйте это ключевое слово, - Django автоматически свяжет эти модели под капотом с помощью AutoField pk

Вернуться на верх