Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
15 / 12 / 4
Регистрация: 06.04.2020
Сообщений: 95

Как получить вычисляемое поле при создании объекта через DRF?

12.11.2020, 21:49. Показов 4044. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, уважаемые.

Подскажите, пожалуйста, как мне в методе create создать вычисляемое поле? Ну то есть при получении данных из запроса, вычислить ещё одно поле и записать его базу.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.11.2020, 21:49
Ответы с готовыми решениями:

Автогенерация slug при создании объекта DRF
Есть модель, у которой есть поле slug, которое успешно автогенерируется при создании объекта через админ панель, но, при создании класса...

Django - Ругается поле формы при создании объекта
models.py class Location(models.Model): name = models.CharField(max_length=100, verbose_name=u"Локация", default=u'') ...

Поле по умолчанию при создании объекта в Django Rest Framework
Добрый день. Делаю запрос на создание объекта через POST, при выполнении запроса объект создается, но поле ManyToManyField не ставится...

6
60 / 44 / 18
Регистрация: 05.03.2019
Сообщений: 313
12.11.2020, 23:58
По сути ты с фронта получаешь JSON ты можешь обращаться к его содержимому как к dict. Принтани на входе в функцию request.POST.get и поймешь
0
15 / 12 / 4
Регистрация: 06.04.2020
Сообщений: 95
13.11.2020, 04:12  [ТС]
Да получить-то POST-параметры не проблема, я не понимаю, как попросить Джанго записать поле, которое не пришло, а вычислилось на основе пришедшего?
0
60 / 44 / 18
Регистрация: 05.03.2019
Сообщений: 313
13.11.2020, 04:15
"вычислилось на основе пришедшего" Это как? можешь подробнее?
0
15 / 12 / 4
Регистрация: 06.04.2020
Сообщений: 95
13.11.2020, 11:21  [ТС]
Например, Ответственного за систему, id которой получили. Система у меня может быть разного типа - приходит contentType и objectID.
0
60 / 44 / 18
Регистрация: 05.03.2019
Сообщений: 313
14.11.2020, 01:59
При всем уважении я к сожалению не умею читать мысли. Ты мне скажи что нам приходит с фронта, что мы должны отправить на запись и какую логику сделать между этими действиями
0
15 / 12 / 4
Регистрация: 06.04.2020
Сообщений: 95
14.11.2020, 23:27  [ТС]
Python
1
2
3
4
5
6
7
8
9
class EmployeeAsTemplateForOrder(models.Model):
    """
    Сохранение выбора сотрудника как образца для заказа списка ролей
    """
    order = models.ForeignKey(Order, verbose_name=_("Order"), null=True, on_delete=models.SET_NULL)
    object_id = models.BigIntegerField()
    content_type = models.ForeignKey(ContentType, on_delete=models.SET_NULL, null=True)
    employee_as_template = models.ForeignKey(Employee, verbose_name=_("Employee as template"), on_delete=models.CASCADE)
    ci = models.ForeignKey(ConfigurationItem, verbose_name=_("Configuration Item"), on_delete=models.CASCADE)
Надо сюда добавить:
Python
1
    ci = models.ForeignKey(ConfigurationItem, verbose_name=_("Configuration Item"), on_delete=models.CASCADE)


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class EmployeeAsTemplateViewSet(NestedViewSetMixin, mixins.CreateModelMixin, mixins.UpdateModelMixin,
                                    GenericViewSet, IdmMixin):
    serializer_class = EmployeeAsTemplateSerializer
    permission_classes = (IsAuthenticated,)
 
    def get_object(self):
        result = EmployeeAsTemplateForOrder.objects.filter(order=self.get_or_create_order(),
                                                          content_type=self.request.data.get('content_type'),
                                                          object_id = self.request.data.get('object_id'))
        if result:
            return result.first()
 
    def check_employee_roles(self, employee_id, content_type, object_id):
        """
        Проверка, есть ли у сотрудника роли в m-system или Ci
        """
        users_roles = Role.objects.filter(pk__in=get_employee_idm_role_ids(Employee.objects.get(pk=employee_id)))
 
        if content_type == ContentType.objects.get_for_model(MSystem).id:
            users_roles_in_object = users_roles.filter(m_system_id=object_id)
        else:   # CI
            users_roles_in_object = users_roles.filter(configuration_item_id=object_id)
        return len(users_roles_in_object)>0
 
    def create(self, request, *args, **kwargs):
        if self.check_employee_roles(request.data.get('employee'), request.data.get('content_type'),
                                     request.data.get('object_id')):
                exist_template = self.get_object()
                if exist_template:
                    return super().update(request, *args, **kwargs)
                else:
                    return super().create(request, *args, **kwargs)
        else:
            return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)

CI-ку я сейчас возвращаю сериализатором, но хочется хранить её в базе, чтобы было быстрее:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class EmployeeAsTemplateSerializer(serializers.ModelSerializer):
    """
    Для запоминания выбора сотрудника как образца набора ролей в КЕ
    """
    order = serializers.HiddenField(default=TemporaryOrderDefault())
    content_type = serializers.PrimaryKeyRelatedField(many=False, queryset=ContentType.objects.all(),
                                                              required=False)
    object_id = serializers.IntegerField(required=False)
    employee_as_template = serializers.PrimaryKeyRelatedField(many=False, queryset=Employee.objects.all(),required=True)
    ci_id = serializers.SerializerMethodField(read_only=True)
 
    def get_ci_id(self,obj):
        return get_ci_id_for_obj(obj)
 
    class Meta:
        model = EmployeeAsTemplateForOrder
        fields = ('order', 'content_type', 'object_id', 'employee_as_template', 'ci_id')
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.11.2020, 23:27
Помогаю со студенческими работами здесь

Ошибка при создании нового документа: Поле объекта не обнаружено (srcElement)
Здравствуйте. Создаю программно новый документ ЭлектронноеПисьмо. Нужно передать текст письма, который заполняется в элементе формы...

Вычисляемое поле: подстановка наименования объекта вместо его ключа
Имеется база данных в которую заносится наименование документации, кол-во экземпляров поступивших на хранение. Включает следующие таблицы: ...

Как создать вычисляемое поле при связи многие ко многим
Здравствуйте У меня есть поставщик(Provider) и есть машина(Car). Условно, машина поставляется с завода по одной цене. Поставщик будет её...

Не вызывается override метод при создании объекта через рефлексию
Воопщем у меня есть словарь, в котором записаны типы классов <enum, System.Type> Я по enum, чтоб не было if пытаюсь создать быстро копию...

Хочу чтоб при создании нового документа реквизиту присваивалось значение по умолчанию-Поле объекта недоступно для записи
Хочу чтоб при создании нового документа реквизиту присваивалось значение по умолчанию Вид Цены и Склад Вот код (обычная форма) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru