Ответы пользователя по тегу Django
  • Создал приложение и Модель для отслеживания онлайн пользователей ссылка на урок https://evileg.com/ru/post/546/ выдает ошибку при создании миграций?

    syschel
    @syschel
    freelance/python/django/backend
    Вы пытаетесь переопределить модель пользователя, но в settings видать не указали, что было переопределение. Вот у вас и пошёл конфликт с базовой моделью, которая обозвана точно так же. AUTH_USER_MODEL

    settings.py
    AUTH_USER_MODEL = 'my_auth_project.User'

    Если конфликт имён будет всёравно, то переименуйте свою кастомную модель, к примеру на MyUser
    Ответ написан
    Комментировать
  • Стоит ли использовать Django при разработке относительно небольшого сайта?

    syschel
    @syschel
    freelance/python/django/backend
    php - голый, без фреймворков будет "лучше" и "проще". Не придётся искать VPS для хостинга, или хостинг площадки с поддержкой питона. Не будет столько же бубнов с залитием и запуском. Для описанного функционала, даже фреймворк не нужен, всё уложится в пол сотни пхп строк.
    Если же вопрос строится из того, что питон и джанго это единственные тебе знакомые язык с фреймворком. То бери их, потому что знакомое проще и быстрее.
    Если же волнуешься за место на хостинге, то сейчас уже не те времена, когда хостинг 100мб в месяц стоил около 1000 рублей. Сейчас гигами продают, за доллар. Тут больше вопрос с поддержкой питона, так как под него не каждый хостер продаст требуемое, а ВПС как правило дороже и "сложнее" для новичка.
    Ответ написан
    Комментировать
  • Как Url-шаблон передать в DetailView?

    syschel
    @syschel
    freelance/python/django/backend
    как мне pk передать в views.py используя DetailView&

    Оно само ловит pk/id, передавать не нужно, главное эту переменную указать в адресе.

    django 3+

    У вас кажется древняя документация по джанге, сейчас так урлы не строят.
    Правильнее было бы так:
    urlpatterns = [
        path('', views.index, name='index'),
        path('books/', views.BookListView.as_view(), name='books'),
        path('book/<int:pk>/', views.BookDetailView.as_view(), ),
        path('authors/', views.AuthorListView.as_view(), name='authors'),
        path('author/<int:pk>/', views.AuthorDetailView.as_view(), name='author-detail')
    ]
    Ответ написан
    2 комментария
  • Как отправить переменную в template Django?

    syschel
    @syschel
    freelance/python/django/backend
    Два варианта вижу я:
    1. Работать через context_processors. Создать свой класс процессора и добавить его в сеттинги. Тогда он будет на любой странице срабатывать. Внутри уже этого процессора обрабатывать урлы и так далее.
    context_processors.py
    from django.core.context_processors import request
    def sidebar(request):
        return {'context_auto': ...}

    settings.py
    TEMPLATES = [
        { ...,
            'OPTIONS': {
                'context_processors': [
                            "context_processors.sidebar",
                ],
            },
        },
    ]

    В любом шаблоне теперь будет доступна переменная "context_auto" вызывать можно {{ context_auto }} или передавать.

    2. Другой вариант. Использовать Inclusion tags, а не{% include "sidebar.html" %} и через него выводить свой sidebar. То есть вы создаёте функцию, в которой прописываете логику и загрузку sidebar.html а на странице уже инклудите именно функцию, а не html
    templatetags/inclusion_tag.py
    @register.inclusion_tag('sidebar.html', takes_context=True)
    def sidebar(context):
        return ...

    В main.html пишем
    {% sidebar %}
    Ответ написан
  • Разница между сайтом "блог" и "новостным" сайтом?

    syschel
    @syschel
    freelance/python/django/backend
    Задался таким вопросом. В чем отличие между сайтом "блог" и "новостным" сайтом, в техническом плане?
    Ни чем. Это как в столярном деле, "чем отличается шкаф от тумбочки технически?", ответ "ни чем, только размерами". Что у блога, что у новостного сайта, функционал может быть идентичным. Как и блог может быть в десятки раз монструознее новостного сайта, при этом допустимо и обратное. Всё зависит от конкретных задач. Новостной сайт может быть и из одной страницы, где всего пяток новостей, меняющихся раз в месяц. Как и блог состоящий из сотней разделов и "модулей", не завязанных чисто на "текстовом" контенте.

    Какие модули, библиотеки используются для создания сайта новостей в Django?
    Какие модули, библиотеки используются для создания сайта блог в Django?
    Если вас интересуют "модули и библиотеки", то это нужно смотреть в сторону готовых ЦМС. Джанго это всётаки фреймворк, где подразумевается собственноручное написание с использованием функционала фреймворка, а не использование сторонних "модулей и библиотек".

    За googlи! - гуглил четкого ответа нет!
    Зачем Django когда есть Wordpress - ответ: потому что Python!
    Если не корректно задан вопрос - буду рад если кто то поправит, но суть вопроса думаю все равно понятна.
    Если у вас "академический" интерес к Джанге, то советую на ближайшие пол года забыть о таких вещах как "готовые модули и библиотеки". Ладно там Pillow для работой с картинками или requests для работы с запросами к другим сервисам. Но вот функционал "блога"/"новостей", это всё делается инструментами джанги. Авторизация, админка, контент, поиск и так далее.

    исторически сложилось что Python изучается как основной язык программирования, да и задача не состоит в быстром запуске проекта, основной упор нацелен на его качестве, к слову "WStanley", а что касается удобства на Django, уже появился Wagtail CMS
    Ответ выше, для изучения питона и его фреймворка Джанго, не нужны вам готовые цмс, библиотеки и модули. Изучите внимательно фреймворк, он всё реализует своим функционалом.
    Ответ написан
    Комментировать
  • Как получить посты за текущую неделю django queryset?

    syschel
    @syschel
    freelance/python/django/backend
    Можно запросить данные по номеру недели week и iso_year
    import datetime
    date = datetime.datetime.today()
    week = date.strftime("%V")
    
    Entry.objects.filter(pub_date__week=week)


    from django.utils.timezone import now
    year, week, _ = now().isocalendar()
    
    Entry.objects.filter(pub_date__iso_year=year, pub_date__week=week)
    Ответ написан
  • Как привязать тэг к посту в django?

    syschel
    @syschel
    freelance/python/django/backend
    В админке, если выбрать созданный тэг через shell, то в шаблоне он отображается как main.Tag.None. (main - название приложения) Как это исправить?

    Всё верно выводит.
    Post - это список постов, вы выводите только один. К посту у вас привязан список тегов (не ForeignKey), сталобыть вам список и выводят, который вы должны обработать.
    В шаблоне добавьте .all и увидете список тегов привязанных к даному посту.

    {{ post.tag.all }}

    Ну а дальше и обрабатывайте как список
    {% for tg in post.tag.all %}{{ tg.title }}{% endfor %}


    З.Ы. В модели поле с ManyToManyField лучше задавать имя переменной в множественном числе, то есть tags, а не tag.
    Ответ написан
    Комментировать
  • Как в Django прикрутить пользователя из кастомной системы регистрации?

    syschel
    @syschel
    freelance/python/django/backend
    Если нет возможности "переписать по человечески" и вы точно уверены что там "не по человечески", то три варианта:
    1. Писать свой context_processors и туда добавить всё что вы хотите получать от "классического" варианта. То есть дублировать классический функционал.
    2. Писать кастомную функцию, работающую с этой кастомной моделью пользователя. И везде где вам нужно, работать с этой функцией. То есть дублировать классический функционал.
    3. Геморно, но возможно. Переопределить AuthenticationMiddleware

    Кстати, по сути для п.1 нужна та же самая "функция". Просто способы вызова разные.
    Но лучше конечно же переписать по нормальному. Хотя и не всегда бизнесу это нужно (из-за 1-2 мелких правок, переписывать легаси код).
    Ответ написан
    3 комментария
  • Где ошибка в этом коде?

    syschel
    @syschel
    freelance/python/django/backend
    Смотрите на свой код:
    1. def page(request, key):
    2.     if key == 1:
    3.         a = 0
    4.         b = 50
    5.     data = table.objects.order_by("place")[a:b]

    1 строка, объявили функцию
    2 строк начали условие.
    3 и 4 строка, выполняется только если условие верное, то есть если key равен 1. Если приходит любое значение key кроме 1, то в вашем коде НЕ создаются переменные a и b.
    5 строка, вы пробуете использовать переменные которых не существует. Так как создаются они только при верном условии в строке 2.
    То есть, чтобы код работал, вам надо инициализировать переменные или до условия или после, хоть с нулевым значением. К примеру так:
    def page(request, key):
        a = 0
        b = 10
        if key == 1:
            a = 0
            b = 50
        data = table.objects.order_by("place")[a:b]

    или так
    def page(request, key):
        if key == 1:
            a = 0
            b = 50
        else:
            a = 0
            b = 10
        data = table.objects.order_by("place")[a:b]

    Программе не важно, что вы возможно планируете всегда передавать только 1, то есть у вас по планам условие будет выполнятся всегда, то есть в планах инициализация переменных произойдёт. Но вот программа этого не знает и она ругается.
    Ответ написан
    Комментировать
  • Как связать две модели (формы) в DJANGO автоматически при создании?

    syschel
    @syschel
    freelance/python/django/backend
    Добавлю к Yura Khlyan,
    maniacus26, самое просто решение, создавать запрос с страницы обращения. Напр:
    obrashcenije/2 - страница с информацией об обращении
    obrashcenije/2/dodat_zapros - страница с созданием запроса к конкретному обращению.

    Тогда во вьюхе создания запроса, буде доступен парметр self.kwagrs['obr_id'], если урлу задать как-то так:

    что если нужно в саму форму передать объект(ид) обращения, можно в классе вьюхи через
    class ZaprosCreator(CreateView):
        form_class = ZaprosForm
    
        def get_initial(self):
            return {'obrashcenije': self.kwagrs['obr_id']}

    Или если используется простые виды через функции, то
    form = ZaprosForm(initial={'obrashcenije': self.kwagrs['obr_id']})

    В форме ловить
    class ZaprosForm(forms.ModelForm):
        ...
        def __init__(self, *args, **kwargs):
            super(ZaprosForm, self).__init__(*args, **kwargs)
            self.obrashcenije = kwargs.get('initial').get('obrashcenije', None)


    Ну и как вариант в форме не обрабатывать вообще обращение:
    class ZaprosForm(forms.ModelForm):
        class Meta:
            model = ZaprosModel
            exclude = ('obrashcenije',)

    А уже во вьюхе перед сохранением формы добавить

    class ZaprosView(CreateView):
        form_class = ZaprosForm
    
        def form_valid(self, form):
            obj = form.save(commit=False)
            obj.obrashcenije_id = self.kwagrs['obr_id']
            obj.save()
            return super(ZaprosView, self).form_valid(form)

    ПС. избегайте руских названий моделей/переменных/классов, даже транслитом
    Ответ написан
    Комментировать
  • JS Tablesorter не работает на сервере Django, но при этом работает при открытии шаблона как HTML файла. Куда копать?

    syschel
    @syschel
    freelance/python/django/backend
    {% extends 'base.html' %}
        {% load static %}
        {% block content %}
            <head>

    Вы говорите Джанге, что данный шаблон подгружается внутри файла 'base.html'. Где по канонам должен быть весь "сквозной" для всех страниц код, включая открывающийся и закрывающийся body.
    Но ниже, я вижу у вас тег '<head>'. Это как вообще? У вас в 'base.html' чтоли только открытие и закрытие тега HTML?
    Думаю вся проблема в этом. Когда вы открываете "в лоб", как файл, только текущий шаблон, то у вас с учётом "мусора от Джанги", срабатывает кое-как как html файл. Но когда вы грузите через джангу, там её шаблонизатор всё собирает из разрозненных файлов, которые вы прописывали подгружать и собирает готовый html. А так как у вас одно и тоже из служебных тегов, да ещё вступающее в конфликт очень сильно. То наверно из этого и вытекает, что ничего не работает.

    З.Ы. В блок {% block content %}, нужно выводить только содержимое тега body, никаких head там не должно быть. В саб шоблонах вообще, по сути, должны быть только "куски" вёрстки, которые уникальны для текущей страницы/модуля, а не всё сразу.
    spoiler
    Очень больно смотреть, как люди кушают макароны ботинками, только потому, что не прочитали инструкцию. :`-(
    Ответ написан
    3 комментария
  • Как сравнить строку и datetime?

    syschel
    @syschel
    freelance/python/django/backend
    strptime преобразует строку в дату
    from datetime import datetime
    chday = datetime.strptime('datetime.date(2018, 12, 31)', 'datetime.date(%Y, %m, %d)')
    today = datetime.today()
    print(today < chday)
    print(today > chday)
    print(today == chday)
    type(chday)

    True
    False
    False
    <class 'datetime.datetime'>
    Ответ написан
    Комментировать
  • Как создать поле в models Django которое является результатом арифметической операции других полей?

    syschel
    @syschel
    freelance/python/django/backend
    class Myclass(model.Model):
        x = models.Floatfield()
        y = models.Floatfield()
        
        def result(self):
            return self.x + self.y
    
    a = Myclass.objects.first()
    print(a.result)
    Ответ написан
    Комментировать
  • Как закрыть доступ к сайту для всех кроме группы пользователей?

    syschel
    @syschel
    freelance/python/django/backend
    Добавь авторизацию Apache`м или Nginx`ом. То есть при входе будет выскакивать доп окно с требованием пароля и логина, да дай его им.

    Либо вводи в класс/функцию входа, дополнительное условие с учётом домена сайта.
    Ответ написан
    Комментировать
  • Не сохраняется фото django. Что исправить?

    syschel
    @syschel
    freelance/python/django/backend
    Комментировать
  • Ссылка на другую страницу, как сделать 2 ссылки разными страницами?

    syschel
    @syschel
    freelance/python/django/backend
    Зачем вы инклудите один и тот же файл ссылок, в двух местах(адресах)?
    urlpatterns = [
        url(r'^$', include('mainapp.urls')),
        url(r'^стейк-лосося/', include('mainapp.urls')),
    ]

    Вам никто в базовом urls.py не запрещает делать так:
    from django.conf.urls import url
    from mainapp.views import index, index_wrapper
    
    urlpatterns = [
        url(r'^$', index, name='index'),
        url(r'^стейк-лосося/', index_wrapper, name='index_wrapper'),
    ]
    Ответ написан
    8 комментариев
  • Django.ModuleNotFoundError: No module named 'news '?

    syschel
    @syschel
    freelance/python/django/backend
    В settings.py в блок INSTALLED_APPS = [], не добавлен модуль 'news'
    INSTALLED_APPS = [
        ...
        'news'
    ]
    Ответ написан
  • Как представить time series data если используется ORM?

    syschel
    @syschel
    freelance/python/django/backend
    Так как вы и поняли, так и представляйте.
    Модель в джанге не означает бизнес логику, она означает именно по сути таблицу в БД. По мимо вашего варианта, в БД спокойно могут быть таблицы со списками, к примеру городов, стран, валют, цветов или характеристик.
    Единственное что можете джангой ещё сделать, вроде бы не очевидного. Это переопределить метод Save() у модели А и проверять. Если объект уже есть (то есть выполняется обновление объекта, а не создание), то перед сохранением, старые значения сбросить в вашу "ChangeOptions" которая состоит из полей(связь на А, старое_значение и ДатаТайм).
    Ответ написан
    1 комментарий
  • Как выполнять функцию в одно и то же время в Django?

    syschel
    @syschel
    freelance/python/django/backend
    А на cron повешать не пробовали? Он же как раз и нужен для запуска скриптов по таймеру.

    Я думаю вы не с той стороны подошли к задаче. Кроном же стартовать джанговские вещи можно или через Celery или через менеджеры. Либо вообще просто питон файл вызывать, а внём функцию через __main__
    Ответ написан
    3 комментария
  • Почему collectstatic собирает дубли?

    syschel
    @syschel
    freelance/python/django/backend
    Если я правильно вас понял, то думаю, что вы не до конца поняли смысл STATICFILES_DIRS и STATIC_ROOT

    Разрабатывая приложение локально, вы используете runserver и тут статику отдаёт девелопесркий вебсервер джанги. Когда же вы загрузите на продакшн, там статику отдавать будет уже вебсервер (apache, nginx etc). Пока вы разрабатывает, то runserver берёт статику из пути STATICFILES_DIRS, на продакшене статика будет браться из STATIC_URL.
    Выполняя же команду collectstatic, вы говорите джанге "из локальных папок (а их может быть много), всё собрать в одной для продакшена". Вот и получается, что вы увидели "дубли".

    # Static files (CSS, JavaScript, Images)
    # https://docs.djangoproject.com/en/1.11/howto/static-files/
    MEDIA_ROOT = os.path.join(BASE_DIR, "media")
    MEDIA_URL = '/media/'
    STATIC_ROOT = os.path.join(BASE_DIR, "static")
    STATIC_URL = '/static/'
    
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, "dev_static"),
    )

    Если папка из STATICFILES_DIRS находится внутри проекта, то её я обычно добавляю в .gitignore
    Ответ написан
    3 комментария