Связь многие к одному в Django
Давайте теперь изучим связь многие к одному. Такая связь образуется, когда много записей одной таблицы ссылаются на одну запись другой таблицы.
Давайте посмотрим на примере. Пусть у нас есть следующая таблица с категориями:
categories
- id
- name
Пусть также у нас есть следующая таблица с постами:
posts
- id
- title
- category_id
Много постов могут принадлежать
одной категории. Поле category_id
в таблице постов хранит id
категории. Так получается связь
многие к одному: много постов -
одна категория.
В Django такую связь задают полем
ForeignKey. Его ставят
на стороне многие - то есть
в модели поста.
Давайте создадим модель категории:
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=100)
Создадим модель поста и добавим
в нее ForeignKey на категорию.
Параметр on_delete=models.CASCADE
означает: если категорию удалили -
удалить и ее посты:
class Post(models.Model):
title = models.CharField(max_length=200)
category = models.ForeignKey(
Category,
on_delete=models.CASCADE
)
Полный код обеих моделей будет таким:
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=100)
class Post(models.Model):
title = models.CharField(max_length=200)
category = models.ForeignKey(
Category,
on_delete=models.CASCADE
)
В базе Django создаст колонку
category_id. В коде же
мы обращаемся к полю category
и получаем объект категории, а не
просто число.
Сделайте следующие таблицы:
countries
- id
- name
cities
- id
- name
- country_id
Свяжите эти таблицы через
ForeignKey: город
ссылается на страну.