Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
vp-webdev
6 лет назад

Создание 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
Десятая часть - Авторизация в клиентской части
Одиннадцатая часть - Создание регистрации
Двенадцатая часть - Загрузка файлов на сервер

0
137.976 GOLOS
На Golos с August 2017
Комментарии (1)
Сортировать по:
Сначала старые