Создание web-сервиса. Всё, но не сразу. Сохранение в БД записей со связанными данными.
Сегодня напишу продолжение прошлой статьи из серии статей про nuxt+django. Решил отдельно рассмотреть как добавлять записи в БД со связанными данными, на примере тех же компаний.
Как помним, таблица Company
связана с таблицей User
.
Начнём по порядку. Идём в наш файл-сериализатор. И добавим в UserSerializer
связь с таблицей Company
companies = PrimaryKeyRelatedField(many=True, queryset=Company.objects.all())
PrimaryKeyRelatedField
- используется, чтобы получить данные из таблицы по полю id
.
в fields
допишем 'companies'.
В CompanySerializer
добавим:
user = ReadOnlyField(source='user.username')
ReadOnlyField
- Поле, который просто возвращает значение поля без изменений. Это поле используется по умолчанию с ModelSerializer при включении имен полей, относящихся к атрибуту, а не к полю модели.
В файле views.py
в представление CompanyCreateAPIView
добавим метод perform_create
def perform_create(self, serializer):
serializer.save(user=self.request.user)
Эта функция позволит нам получить объект пользователя из запроса.
В models
необходимо сделать некоторые изменения:
Заменить:
user = models.ForeignKey(User, related_name='company')
на
user = models.ForeignKey(User, related_name='companies')
Так же сделаем, чтобы время добавления компании записывалось автоматом. Для этого меняем:
date = models.DateTimeField()
на
date = models.DateTimeField(auto_now_add=True)
И после этого необходимо в консоли в папке проекта выполнить две команды:
python3 manage.py makemigration
и
python3 manage.py migrate
Так просто добавили новую запись с использованием связанных данных.
Полный листинг кода:
models
views
Serializer
Данный пост подготовлен автором @zheev. В рамках данного цикла статей он расскажет о том, что и как он программировал, какие языки и технологии использовал. С какими трудностями пришлось столкнуться и их решение на реальных примерах.
Первая часть - Вступление
Вторая часть - Проектирование БД
Третья часть - Установка окружения
Четвёртая часть - Установка и настройка Django
Пятая часть - Установка и сборка Vue
Шестая часть - Создание таблиц средствами Django
Седьмая часть - Создание REST приложений на Django
Восьмая часть - Использование фреймворка Nuxt в приложении на Vue
Девятая часть - Делаем авторизацию в Django
Десятая часть - Авторизация в клиентской части
Одиннадцатая часть - Создание регистрации
Двенадцатая часть - Загрузка файлов на сервер