Как этот код связывает два класса друг с другом?
это код с сайта 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] для ссылки на другое поле, но тогда это поле должно быть уникальным.
Большинство современных баз данных добавляют ограничение постороннего ключа : они отклоняют создание или обновление объектов, имеющих в качестве значения величину, для которой нет соответствующей записи в целевой таблице.