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
.