Ответы пользователя по тегу Django
  • Хорошая ли стратегия разбивать монолит джанго на микросервисы джанго?

    @Jack444
    Вообще на самом деле джанго можно сделать аля-микросервисным если рассматривать каждое приложение как отдельный микросервис.
    В Джанго можно подключить для любой модели отдельную базу данных которая может находится на отдельном сервере или другом порту.
    Всё что требуется добавить в модель следующие:
    class MyModel(Model):
        class Meta:
            using = 'default'  # дефолтная база из DATABASES из settings.py

    Использование отдельных баз данных это дело одно, но вам скорее всего хотелось бы чтобы каждое приложение работало на отдельном порту, это тоже не проблема, в каждом приложении создайте systemd.service который запустит экземляр на другом порту и делайте жесткую ссылку в systemd/system, после через nginx проксируйте по location на порт приложения.
    Чисто так технически можно перенести экземпляры на разные серверы и поправить конфиги.
    Важно чтобы секретный ключ был один и тот же везде, иначе будет много проблем, по безопасности всё ок если не раскрывать его третьим лицам.
    Как вариант секретный ключ и другие данные можно хранить в .env и подгружать их в settings.py.
    Если хотите сохранить чистоту коду, то экземляры можно раскидать по папкам, в каждой из них набросать по минималке README.txt с инфой на каком порту запущено, какие команды для остановки и перезапуска, какие паки нельзя трогать а какие можно, можно только ту в которой висит приложение а все остальные папки которые не взаимодействуют из этого приложения можно снести.

    В общем какой-то такой вариант можно реализовать, но я бы рекомендовал оставить как есть и по возможности старые сервисы переписывать на микросервисы FastAPI а новые эндпоинты сразу пилить на нём.
    Ответ написан
    Комментировать
  • Каковы стандарты наименования сводных таблиц в Django?

    @Jack444
    Джанго по колхозному именует таблицы, сам по себе sql не регистрозависимый, потому модель MyTableModel джанго так и создаст appname_mytrablemodel и поэтому мне лично предпочтительнее прописать явно название таблицы.
    class Meta:
        table_name = 'my_table_model'
    Ответ написан
    Комментировать
  • Избавиться от флуда makemessages?

    @Jack444
    django-admin makemessages -l ru -l en --ignore=путь_к_файлу1,путь_к_файлу2
    Ответ написан
  • Как иерархически вывести данные из Django?

    @Jack444
    Надо в меню добавить ещё поле что-то вроде:
    lvl = SmallIntegerField()
    Потом можно попробывать сделать так:
    menu = Menu.objects.select_related('parent').filter(lvl=1)

    Но таким образом не уверен что выше второго уровня в один запрос уложатся.
    Надёжней в ручную поправить:
    menu = Menu.objects.values()
    
    def join_parents(qs: list[dict]): -> list[dict]:
        for i in qs: i['parents'] = join_parents([x for x in qs if x['parrent']==i['id']])
        return qs
    
    join_parents(menu)
    menu = [i for i in menu if i['lvl'] == 1]
    Ответ написан
    Комментировать
  • Сортировка товаров Django?

    @Jack444
    Так и так простое решение, в get параметр можно через запятую фильтры внести как один из вариантов.
    if sort := self.request.GET.get('sort'):
        queryset.order_by(*sort.split(','))
    Ответ написан
    Комментировать
  • Как будет работать 2 домена на одном сервере?

    @Jack444
    1) В djnago ALLOW_DOMAINS добавь оба домена.
    2) В NGINX в server_name добавь оба домена.
    3) В джанго напиши мидлеваре или декоратор который проверяет заголовок HOST в запроса пользователя.
    4) Если ХОСТ=somesite.ru и пользователь авторизован то редиректим на dashboard.somesite.ru а если не авторизован то отдаём страницу авторизации.
    5) Если ХОСТ=dashboard.somesite.ru и пользователь авторизован то не чего не делаем а если не авторизован то редиректим на somesite.ru
    Ответ написан
  • Добавление своих виджетов django admin?

    @Jack444
    Я в одно время так реализовал подобное, не особо вникал в исходный код django просто нашел исходники которые рендарят нужные страницы, внутр вшил js и через js потом пол страницы переправил как понадобилось=)
    Ответ написан
    Комментировать
  • Как реализовать в Django историю посещённых постов?

    @Jack444
    Элементарно, лог сервис пили с одним эндпоинтом и все запросы туда проксируй, записывай дату, время, ip, юзерагента, урл, id пользователя, куку сессии и всё тебе этого хватит чтобы отследить любого пользователя
    Ответ написан
  • Как настроить фильтрацию в Django-admin?

    @Jack444
    class BlankAdmin(ExportActionModelAdmin, admin.ModelAdmin):
        list_display = ('date', 'time', 'grz', 'car_mark', 'wash_man', 'pay_type', 'night_clean', 'price')
        list_filter = ('pay_type', 'wash_man')
        search_fields = ('grz', 'car_mark')
        resource_class = ResAdmin
        date_hierarchy = 'date'
    Ответ написан
    Комментировать
  • Как сформировать правильные связи в базе данных django?

    @Jack444
    Для начала добавь первичный ключ
    Ser_Num = models.PositiveIntegerField(primary_key=True)
    Затем выполни миграции, если вылетит ошибка, удали всё что в __migrations__ и удали эти таблицы из БД, по новой всё мигрируй.
    Сейчас у тебя неявно id как примари в Engine идёт, поэтому связывается ForeignKey по другому полю
    Ответ написан
  • Как при создании обьекта джанго генерировать значение одного поля на основе другого?

    @Jack444
    Django для Image и File полей просто создаёт VARCHAR в бд и закидывает туда названия файла, попробуй так

    class People(models.Model):
        name = models.CharField(max_length=500, unique=True)
        qr_code = models.ImageField(upload_to="img/qr_codes/", verbose_name="QR-код", null = True)
    
        def save(self, *args, **kwargs):
            qr = qrcode.QRCode(version=2, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=1)
            qr.add_data(self.name)
            qr.make(fit=True)
            qr.make_image().save(f'media/img/qr_codes/{self.name}.png'
            self.qr_code = self.name+'.png'
            super().save(*args, **kwargs)
    Ответ написан
  • Как связать две таблицы в Джанго?

    @Jack444
    Position.objects.all().select_related('name')
    Ответ написан
    Комментировать
  • Используется ли celery + django в крупных, или "серьезных" проектах?

    @Jack444
    Celery конечно удобно но по моему старомодно, если что современный python и django запущенный через ASGI будет работать в цикле событий и можно спокойно юзать стандартные инструменты asyncio вместо сторонних библиотек.
    Ответ написан
    Комментировать
  • Возможно ли создание полей модели через форму в Django?

    @Jack444
    Создай дополнительную таблицу, в ней храни местоположение своих моделей а именно на какой строке заканчивается последнее поле. Когда через форму придет запрос на изменение то изменяй фаил моделс и админ затем сдвинь все другие модели на количество добавленых или убавленных строк, в конце через ос.систем выполняй миграции и перезагружай джанго.
    Это такое костыльное решение получится но рабочее.
    Самый лучший вариант это JsonField использовать, но при удаления и изменения поля, нужно будет брать выборку всех записей и в каждом удалить или добавить поле. Либо сделать отдельное подключение к psycopg и прямым SQL запросом удалить/обновить все.
    Ответ написан
    1 комментарий
  • Каким образом AJAX функционирует с джанго?

    @Jack444
    Это не костыль а наоборот распрастраненное решение. Создай новую модель Избранные, туда две связи 1кМногим добавь пользователя и фильм, ещё для анонимных пользователей с моделью сессии можно связать но сессии лучше в мемкеш запихивать. Сделай дополнительную вюху которая принимает аргумент add и del и исходя из запроса удаляй или создавай запись в модели.
    Ответ написан
    1 комментарий
  • Как сделать связь многие ко многим в 1 классе?

    @Jack444
    Создай дополнительную таблицу с двумя полями, в первом айди пользователя поставившего лайк а в другой айди пользователя получивший лайк, ещё поле с таймштампом может пригодится, и всё потом можешь делать выборку по айдишникам кто кому лайки ставит)

    class Like(Model):
        u1 = ForeignKey(User, on_delete=CASCADE, related_name='u1')
        u2 = ForeignKey(User, on_delete=CASCADE, related_name='u2')
        dt = DateTime(auto_now_add=True)
    Ответ написан
    Комментировать
  • Как объединить queryset с вычисляемым полем (которое создается на основе того же queryset)?

    @Jack444
    По идеи может так сработать
    qs1.union(qs2)

    В документации написано что union используется для слияния но по факту не всегда это почему то работает. Может вылезти ошибка мол qs1 не имеет атрибута union
    Ответ написан
    Комментировать
  • Как объединить две записи одной модели в одну запись?

    @Jack444 Автор вопроса
    В общем фреймворком Джанго видимо не предусмотрена такая ситуация. Походу решение проблемы это на основе мультизаписей создать еще одну запись, и удалить все старые. Затем парсить бд на наличие старых записей, так как ключи удалены по-любому вместо мультиплобьект будет выскакивать какаянить другая ошибка, поймав её обрабатываем путем обновления форендж Кей. И так по-любому проблема исчезнет.
    Ответ написан