Как этот код связывает два класса друг с другом?

это код с сайта django

from django.db import models
from django.db.models.deletion import CASCADE


class ToDoList(models.Model):
    name = models.CharField(max_length=200)


    def __str__(self):
        return self.name



class Item(models.Model):
    todolist = models.ForeignKey(ToDoList, on_delete=models.CASCADE)
    text = models.CharField(max_length=300)
    complete = models.BooleanField()

    def __str__(self):
            return self.text

Мне просто интересно, что именно делает

 todolist = models.ForeignKey(ToDoList, on_delete=models.CASCADE) 

do? Очевидно, что она создает переменную todolist, которая является просто моделью foreignkey (поскольку это не объект, определенный в Django), но почему в ней есть класс "ToDoList"? Она принимает его как аргумент или что-то еще? Я не совсем понимаю, как это связывает класс item (или объект этого класса) с классом/объектом ToDoList? Надеюсь, это не слишком запутанно

A ForeignKey [Django-doc] - это поле, которое ссылается на объект модели. Это может быть та же модель или другая модель. Это означает, что Item может ссылаться на ToDoList.

А ForeignKey - это отношение "многие-к-одному" [wiki]. Это означает, что каждый Item будет относиться к одному ToDoList, а ToDoList может иметь ноль, один или несколько Item, которые относятся к этому ToDoList.

Если вы загружаете Item в память, вы можете загрузить ToDoList, на который он ссылается, в память с помощью:

myitem.todolist

Django также построит концептуальное отношение в обратном порядке. Так, если у вас есть ToDoList, то вы можете получить все Item, которые указывают на этот ToDoList с помощью:

mytodolist.item_set.all()

Название ForeignKey происходит от того, как вы определяете такое поле в базе данных. В базе данных это поле будет иметь имя todolist_id, которое ссылается на первичный ключ элемента, на который оно ссылается. Вы можете использовать параметр to_field=… [Django-doc] для ссылки на другое поле, но тогда это поле должно быть уникальным.

Большинство современных баз данных добавляют ограничение постороннего ключа : они отклоняют создание или обновление объектов, имеющих в качестве значения величину, для которой нет соответствующей записи в целевой таблице.

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