Ответы пользователя по тегу Django
  • Как записать в бд django таблицу, а не строку?

    @dimuska139
    Backend developer
    Для начала я бы попробовал bulk_create, поделив эти 150к на чанки определенного (установить опытным путем) размера. А вообще конкретизируйте задачу, пожалуйста. Не очень понятно, зачем вам 150к строк в базу нужно писать каждые 10 секунд.
    Ответ написан
    Комментировать
  • Ошибки во время пагинации Django?

    @dimuska139
    Backend developer
    def product_list(request, category_slug=None):
        category = None
        categories = Category.objects.all()
        products = Product.objects.filter(available=True)
        page = request.GET.get('page')
        
        if category_slug:
            category = get_object_or_404(Category, slug=category_slug)
            products = products.filter(category=category)
        
        paginator = Paginator(products, 3)
    
    
        try:
            products = paginator.page(page)
        except PageNotAnInteger:
            products = paginator.page(1)
        except EmptyPage:
            products = paginator.page(paginator.num_pages)
    
        return render(request,
                    'products/list.html',
                    {'category': category,
                    'categories': categories,
                    'page': page,
                    'products': products})
    Ответ написан
    Комментировать
  • Как автоматически выполнять команды на сервере от клиента при помощи Джанго?

    @dimuska139
    Backend developer
    Я бы Celery прикрутил и асинхронно эти команды выполнял.
    Ответ написан
    Комментировать
  • Можно ли сделать обратную связь моделей ForeignKey?

    @dimuska139
    Backend developer
    Да, можно

    class Man(models.Model):
         company=models.ForeignKey('Company', related_name='mans')
    ...
    Company.objects.get(id=1).mans
    Ответ написан
    1 комментарий
  • Как в django orm сформировать фильтр по массиву?

    @dimuska139
    Backend developer
    products = Product.objects.filter(country_id__in=countries_ids)
    Ответ написан
    Комментировать
  • Как составить структуру проекта интернет-магазина на django?

    @dimuska139
    Backend developer
    Я бы сделал приложение common, в котором хранил всякие общие шаблоны и логику. В нем "главная страница", "контакты", "о нас" и все в том духе. Там же общие модели (например, модель для изображений). Под новости и товары тоже сделал отдельные приложения, потому что по смыслу это не связанные вещи.

    P.s. а вообще пилить интернет-магаз на Django запарно, как и на любом другом фреймворке. Потому что многие вещи приходится делать вручную. Получившийся магаз особо расширяемым тоже не будет. Если магаз типовой, проще взять какой-нибудь OpenCart и все. Многое работает из коробки, функциональность можно достаточно легко расширять плагинами, которых тоже дофига.
    Ответ написан
    Комментировать
  • Форма сохраняется, её видно в панельке администратора, но на сайте отображения нет. Как решить проблему?

    @dimuska139
    Backend developer
    Вы в шаблон передаете notes, подразумевая, что там список заметок. Почему Вы notes в шаблоне не используете? Чтобы они, собственно, выводились.
    Ответ написан
    Комментировать
  • Как создать велосипед в django?

    @dimuska139
    Backend developer
    1. Можно. Я не использую админку Django, сделал свою админку на React
    2. Найди пример любого приложения на React на Github и там же пример любого приложения с django-rest-framework
    3. По-хорошему, надо юзать стандартную Django-админку, если твой сайт на Django (т.к. это экономит кучу времени), но если ты решил сделать свою (например, на React), то пишешь API, используя django-rest-framework и пишешь саму админку на React, которая будет с этим API взаимодействовать.
    Ответ написан
    5 комментариев
  • Как сделать срез в Django ORM без all()?

    @dimuska139
    Backend developer
    Если Вы считаете, что из базы в данном случае вытаскиваются все записи, а потом на уровне кода часть из них обрезается, то это не так. all() не делает запрос к базе. Запрос вместе с LIMIT выполняется уже внутри пагинатора.

    Это я к тому, что, скорее всего, Вы увидели, что страница с пагинатором грузится безумно долго и предположили, что из базы выгребаются все записи, но это совсем не так. Долго это выполняется потому, что на таком количестве строк стандартные решения пагинации будут в принципе работать плохо, потому что на "дальних" страницах курсор базы данных будет перебирать все записи, идущие до этой страницы. Кроме того, пагинатор выполняет count-запрос, который выполняется долго, потому что это фулскан всей таблицы, где миллионы записей.
    Ответ написан
    Комментировать
  • Разница между сайтом "блог" и "новостным" сайтом?

    @dimuska139
    Backend developer
    Отличия между сайтом "блог" и "новостным" сайтом, в техническом плане, нет. Они различаются, в основном, по контенту. Ну и уровнем "размаха". Новостные ресурсы обычно развиваются достаточно большим количеством людей, у многих новостных ресурсов есть несколько редакторов, свои журналисты.

    Для создания блога или сайта новостей на Django тебе при любом раскладе потребуется, как минимум, virtualenv и pip. Потому что у любого проекта есть зависимости. Тот же фреймворк Django - это тоже зависимость. По ходу разработки ты только одним Django, кстати, тоже не обойдешься - придется некоторые библиотеки использовать в зависимости от твоих задач. Например, очень пригодится django-debug-toolbar. Так что то, что тебе пишут, что для простого блога, кроме Django, ничего совсем уж не нужно - не совсем правда.

    Зачем Django когда есть Wordpress - ответ: потому что Python!

    Кстати, если тебе хочется что-то среднее между фреймворком и Вордпрессом, но при этом чтобы был питон, а не php, то погляди в сторону Wagtail CMS. Это CMS, написанная с использованием Django, но она, в отличие от Вордпресса, больше с уклоном в самостоятельное программирование на ее основе.
    Ответ написан
    Комментировать
  • Как отсортировать QuerySet по методу?

    @dimuska139
    Backend developer
    Самый простой способ - это не считать количество для каждого юзера каждый раз, а при создании/удалении юзером своей записи один раз считать количество его записей и обновлять его значение в поле в таблице пользователей. То есть в таблице с пользователями у тебя будет поле posts_count, в котором будет храниться количество постов юзера) - и просто по нему делай сортировку. Это и проще, и быстрее работать будет.

    А если делать через метод get_posts_count, то для отображения списка пользователей с количеством их постов на странице, у тебя к базе будет сделано N запросов для подсчета количества, где N - это число пользователей которые будут отображены на странице, что совсем не оптимально.

    Но если уж хочется не делать отдельное поле и считать количество одним запросом вместе с выборкой юзеров, то можно через annotate (взял из доки):
    >>> from django.db.models import Count
    >>> q = Book.objects.annotate(Count('authors'))
    # Interrogate the first object in the queryset
    >>> q[0]
    <Book: The Definitive Guide to Django>
    >>> q[0].authors__count
    2
    Ответ написан
    4 комментария
  • Как правильно создавать slug на Django?

    @dimuska139
    Backend developer
    Можно, но если тебе потребуется реализовать связь m2m (например, принадлежность постов нескольким группам), то тебе придется в таблице-связке этот слаг дублировать. Не знаю, насколько это удобно, ведь слаг может меняться вообще - и придется его менять в нескольких таблицах. Или, скажем, тебе потребуется хранить в отдельной таблице "лайки" постов. В одном случае там у тебя будет post_id, на которое будет повешен внешний ключ на поле id (pk) в таблице с постами, а в другом тебе придется опять slug прописывать. По памяти, если что, varchar больше места занимает, чем int, индексы для таких столбцов, соответственно, тоже.

    Тем более, если ты в этой же таблице будешь хранить историю изменений, то тебе придется slug дублировать. Так что primay_key=True внезапно уже бы не годилось на этом поле.
    Ответ написан
    Комментировать
  • Как создать систему лайков без регистрации django?

    @dimuska139
    Backend developer
    Варианты такие:
    1. Привязаться по IP, а с помощью cron или celery очищать записи, дата создания которых превышает 24 часа
    2. После успешного лайка делать запись в COOKIE с id сущности, которую лайкнули. Время жизни COOKIE - 24 часа. При попытке лайкнуть делать проверку.
    3. После успешного лайка делать запись в localStoreage с id сущности, которую лайкнули, и время. При попытке лайкнуть делать проверку.

    Последние 2 пункта делать удобней средствами JS. Как ты понимаешь, они вообще не надежные, потому что куки и localStorage хранятся в браузере юзера и ничего не мешает их удалять.
    Ответ написан
    2 комментария
  • Где в Django хранить бизнес логику системы?

    @dimuska139
    Backend developer
    Не надо fat models, делай сервисный слой. Эта либа пригодится. Правда при ее использовании твоя бизнес-логика все равно будет зависеть от Django, но все равно удобно))
    Ответ написан
    Комментировать
  • Группировка методов модели через наследование?

    @dimuska139
    Backend developer
    Я в таком случае юзаю вот эту библиотеку. Не знаю, почему тут все советуют навигацию по коду и т.п. "Толстые" модели - это реально неудобно, от этого надо уходить.
    Ответ написан
    Комментировать
  • Ошибка в конечном теге шаблона?

    @dimuska139
    Backend developer
    % block aside_news_sections%}

    А скобка где?
    Ответ написан
    2 комментария
  • Можно ли использовать несколько шаблонов дизайна в Django?

    @dimuska139
    Backend developer
    Вообще Django - это не CMS, а фреймворк. Поэтому сравнивать с Drupal/Wp и т.п. - неуместно. Но ничего тебе не мешает запилить эту логику самостоятельно. Создай модельки themes и themes_templates: в первой у тебя будут храниться темы, а во второй - пути к шаблонам для них. Можно вместо путей к файлам хранить и сами шаблоны текстом - тоже прокатит. Но это не очень "красивое" решение, я считаю.

    В themes_templates сделай поле type, в котором будет храниться тип шаблона, который будет указывать, для чего конкретно шаблон. В themes сделай поле is_active, которое будет указывать, какая тема активна в текущий момент. Во view, где у тебя указывается, какой шаблон рендерить, ходи в базу и вытаскивай нужный путь к шаблону (ну или его контент, если решил в базе в виде текста хранить) в зависимости от активной темы (themes.is_active = True) и типа шаблона (у каждой страницы свой тип шаблона).
    Ответ написан
    Комментировать