Создание связи "многие ко многим"
Мы собираемся добавить в модель Image еще одно поле для хранения пользователей которым понравилось изображение. В этом случае нам понадобится связь "многие ко многим", поскольку пользователю может понравиться несколько изображений, и каждое изображение может нравиться несколькими пользователями.
Добавьте в модель Image следующее поле:
users_like = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='images_liked', blank=True)
При определении ManyToManyField, Джанго создает промежуточную таблицу соединения с использованием primary keys обеих моделей. ManyToManyField может быть определена в любой из двух связанных моделей.
Как и в случае с полями ForeignKey, атрибут related_name of ManyToManyField позволяет нам присваивать имя отношениям от связанного объекта. Поля ManyToManyField предоставляют связь «многие ко многим», который позволяет нам извлекать связанные объекты, такие как image.users_like.all() или из объекта пользователя, например user.images_liked.all().
Откройте командную строку и выполните следующую команду, чтобы создать начальную миграцию:
python manage.py makemigrations images
На выходе вы должны увидеть следующее:
Migrations for 'images':
0001_initial.py:
- Create model Image
Теперь выполните эту команду для применения миграции:
python manage.py migrate images
На выходе вы должны увидеть следующее:
Applying images.0001_initial... OK
Теперь модель изображения синхронизирована с базой данных.