• Как в Django добавить связь m2m для нескольких объектов?

    @NyxDeveloper Автор вопроса
    def save(self, *args, **kwargs):
            if not self.id:
                super(Model2, self).save(*args, **kwargs)
                self.model1_set.add(*self.task_set.model.objects.values_list("id", flat=True))
    Ответ написан
    Комментировать
  • Как в периодических задачах Celery использовать django orm?

    @NyxDeveloper Автор вопроса
    В общем, при таком подходе нужно не через beat запускать, а через worker. Что, на самом деле, странно, учитывае, что для периодических задач по расписанию официальная документация говорит использовать именно beat.
    https://docs.celeryproject.org/en/stable/django/fi...
    Ответ написан
    Комментировать
  • Фильтрация DjangoFilterBackend по нескольким значениям?

    @NyxDeveloper Автор вопроса
    В качестве временной меры был предпринят следующий костыль в методе get_queryset:
    def get_queryset(self):
            qs = self.queryset
            if len(self.request.query_params) > 0:
                for p in self.request.query_params:
                    for f in self.filterset_fields:
                        if p == f:
                            qs = qs.filter(**{'%s__in' % f: self.request.query_params.getlist(p)})
            return qs

    Я не считаю это достаточно подходящим решением, т.к. код слишком плосский, его не вынести в отдельную функцию и вообще он мне не нравится, поэтому вопрос все еще открыт. Прошу не обделять вниманием, пожалуйста.
    Ответ написан
    Комментировать
  • DRF, как сериализовать объект по разному, в зависимости от метода?

    @NyxDeveloper Автор вопроса
    В общем, мне в голову пришла только идея отделить строковые представления от привычных pk с помощью нижнего подчеркивания. Теперь я дублирую поля, которые нужно отдавать в строковом состоянии и пишу их названия, начиная с нижнего подчеркивания.
    serializers.py
    class ProjectSerializer(ModelSerializer):
        _counterparty = serializers.SlugRelatedField(many=False, read_only=True, slug_field='short_name',
                                                     source='counterparty')
        _participant = serializers.SlugRelatedField(many=False, read_only=True, slug_field='short_name',
                                                    source='participant')
        _project_type = serializers.SlugRelatedField(many=False, read_only=True, slug_field='title',
                                                     source='project_type')
        _status = serializers.SlugRelatedField(many=False, read_only=True, slug_field='title', source='status')
        _funding_source = serializers.SlugRelatedField(many=False, read_only=True, slug_field='title',
                                                       source='funding_source')
        _quarter = serializers.SlugRelatedField(many=False, read_only=True, slug_field='title', source='quarter')
    
        _team = serializers.SlugRelatedField(many=False, read_only=True, slug_field='title', source='team')
    
        _employee_init = serializers.StringRelatedField(many=False, read_only=True, source='employee_init')
    
        class Meta:
            model = Project
            fields = '__all__'


    json
    [
        {
            "id": 1,
            "_counterparty": "ООО \"Локалхост\"",
            "_participant": "Участник 1",
            "_project_type": "Стройка",
            "_status": "Активный",
            "_funding_source": "Собственный бюджет",
            "_quarter": "Первый I",
            "_team": "Бригада 345",
            "_employee_init": "Сотрудник Сотрудник Сотрудник",
            "title": "первый проект",
            "amount_planned": 132456.0,
            "implementation": 2021,
            "date_contract": "2021-04-02",
            "date_delivery_contract": "2021-04-02",
            "date_gk_contract": "2021-04-08",
            "date_delivery": "2021-04-23",
            "date_commissioning": "2021-04-24",
            "approved": true,
            "is_archive": false,
            "counterparty": 1,
            "participant": 1,
            "project_type": 1,
            "status": 1,
            "funding_source": 1,
            "quarter": 1,
            "team": 1,
            "employee_init": 1
        }
    ]


    Несмотря на это мне кажется, что я придумал ужасный костыловелик и есть способ получше, по этому прошу поделиться своими способами решения данной проблемы.
    Ответ написан
    Комментировать
  • UWSGI не запускает django проект из коробки?

    @NyxDeveloper Автор вопроса
    Если вдруг у кого-то появится такая же проблема с версиями python, то на ubuntu версии меняются следующей командой
    sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1
    Ответ написан
    Комментировать
  • Как передать параметр initial в поле select multiple формы django?

    @NyxDeveloper Автор вопроса
    initial поля по умолчанию типа list, так что ему можно передать список, состоящий из нужных id объектов интересующей вас модели (главное чтобы эта модель соответствовала типу объектов в queryset поля)
    form.base_fields['field_name'].initial = [
        i for i in form.base_fields['field_name'].choices.queryset.filter(id__in=[1, 2, 3, 4])
    ]
    Ответ написан
    Комментировать
  • Как сгенерировать html таблицу во view и экспортировать ее в excel?

    @NyxDeveloper Автор вопроса
    Первое, что я хочу сказать - НИКОГДА ТАК НЕ ДЕЛАЙТЕ!
    В общем, проще отдать это дело pandas, он сам разберется. И никакого html без ссылки в виде url!
    Ответ написан
    Комментировать
  • Как передать параметр функции в декоратор?

    @NyxDeveloper Автор вопроса
    Комментировать
  • Почему django makemigrations удаляет объекты в базе данных?

    @NyxDeveloper Автор вопроса
    Если работать через удаленное подключение в PyCharm и не отключить автоматическую подгрузку базы данных на сервер при создании и применении миграций, то вместе со всеми изменениями в коде на сервер будет загружена пустая база данных, так как PyCharm ее воспринимает как измененный файл. Поэтому, при работе с удаленным сервером, применять миграции следует в терминале вашей ssh сессии.
    Ответ написан
    Комментировать
  • Как соединить ПО с устройством которая работает на стороннем сервере?

    @NyxDeveloper
    Нужно настроить api. На малинке добавить логику отслеживания считвыания, то что считалось (отпечаток пальца в вашем случае) и делать запрос на нужный адрес сервера. То как обрабатывать это на сервере - уже другой вопрос, но суть остается той же, хотите связать два устройства по сети, нужно настроить между ними общение в виде какого-либо api. Можно использовать питон, на нем отправка данных делается в несколько строк
    import requests
    r = requests.post("http://your-server-url", data={'your data from rashpbery'})
    if r.status_code == 200:
        #    обрабатываем ответ от сервера            
    else:
        #    обрабатываем другой код или ошибку с сервера
    Ответ написан
    Комментировать
  • Как отследить время бездействия пользователя и деаутентифицировать его?

    @NyxDeveloper Автор вопроса
    Спокойно, я нашел нужную документацию, в ней все написано
    https://docs.djangoproject.com/en/dev/topics/http/...
    Ответ написан
    Комментировать