Django: ограничить внешний ключ только строками с одинаковым идентификатором - PullRequest
0 голосов
/ 05 марта 2019

Для проекта Django я получил две модели:

class User(AbstractUser):
    child = models.ForeignKey('children.Child', null=True, on_delete=models.SET_NULL)

И следующее:

class Child(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)

Я хочу, чтобы User.child можно было установить только для объектакоторый имеет child.user_id = user.id, с ограничением предпочтительно.Это возможно?Если это имеет значение, я использую PostgreSQL

1 Ответ

0 голосов
/ 05 марта 2019

Разве вы не ищете отношения один к одному ?

  • user в Child можно установить только на один User.
  • child в User можно также установить только на один Child.
  • Вы хотите, чтобы user в Child и child в User указывали друг на друга.

Это именно то, что такое отношения один-к-одному.Следующий код даже проще, чем ваш текущий, и он налагает ограничения на уровне базы данных:

class User(AbstractUser):
    # The relationship only needs to be defined in one of the models
    pass

class Child(models.Model):
    user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)

Если есть более мелкие моменты, которые вы должны покрыть (например, если есть ситуации, в которых вам потребуетсясвязь должна быть определена в одном направлении, но не в другом), затем уточните пример использования.

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