• en
  • Language: ru
  • Documentation version: 2.0

1. Как моделировать отношения один на один?

Отношения «один к одному» возникают, когда в первой таблице есть ровно одна запись, которая соответствует одной записи в связанной таблице. Здесь у нас есть пример, где мы знаем, что у каждого человека может быть только один биологический родитель, т.е. мать и отец. У нас уже есть модель пользователя auth, мы добавим новую модель UserParent, как описано ниже.:

from django.contrib.auth.models import User

class UserParent(models.Model):
    user = models.OneToOneField(
        User,
        on_delete=models.CASCADE,
        primary_key=True,
    )
    father_name = models.CharField(max_length=100)
    mother_name = models.CharField(max_length=100)

>>> u1 = User.objects.get(first_name='Ritesh', last_name='Deshmukh')
>>> u2 = User.objects.get(first_name='Sohan', last_name='Upadhyay')
>>> p1 = UserParent(user=u1, father_name='Vilasrao Deshmukh', mother_name='Vaishali Deshmukh')
>>> p1.save()
>>> p1.user.first_name
'Ritesh'
>>> p2 = UserParent(user=u2, father_name='Mr R S Upadhyay', mother_name='Mrs S K Upadhyay')
>>> p2.save()
>>> p2.user.last_name
'Upadhyay'

Метод on_delete используется для того, чтобы сообщить Django, что делать с экземплярами модели, которые зависят от экземпляра модели, который вы удаляете. (например, отношения ForeignKey). Параметр on_delete=models.CASCADE указывает Django на каскадное удаление, т.е. продолжение удаления зависимых моделей.:

>>> u2.delete()

Также будет удалена связанная запись UserParent.