Задать вопрос
Ответы пользователя по тегу Django
  • Как передать значение для формы в Django?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Уже писал, по идее -на почте должен быть более менее - полный ответ.
    Вариант 1:
    Использовать сессию.
    В AddClient сохранять id в нее
    client = form.save()
    request.session['client_id'] = client.id
    request.session.modified = True

    В AddOrder, сохранять форму с commit=False и добавлять id из сессии, после чего - удалять ключ из нее (также с ...modified = True)
    UPD: Нужно будет обновить модель, изменив FK и сделав его null/blank=True.
    Ну и проверять перед сохранением заказа, есть ли в сессии нужный ключ.
    Плюсы: можно продолжить редактирование, даже после создания юзера и закрытия браузера.
    Минусы: без дополнительной обработки (например - запрет на модификацию существующего в сессии ключа) может возникнуть случай когда юзер перезаписывается до создания заказа.
    Вариант 2:
    redirect(reverse('app:view', kwargs={ 'bar': FooBar })) # Id записывать в kwargs

    Плюсы: не возникнет указанной выше ситуации.
    Минусы: нужно модернизировать url
    Ответ написан
    Комментировать
  • Почему в админке не показывает аватары пользователей?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Потому-что не у всех юзеров есть аватар, и не указан по умолчанию.
    def get_us_avatar(self, obj):
            print(repr(obj.avatar))
            if obj.avatar:
                return mark_safe(f'<img src="{obj.avatar.url}" alt="" height="100px">')
            else:
                return mark_safe(f'<img src="" alt="">')

    P.S. Для хранения файлов пользователей стоит использовать папку media.
    И да - используйте генератор случайных имен, иначе в какой-то момент юзер загрузит картинку, название которой совпадает с названием уже загруженной.
    Ответ написан
    Комментировать
  • Какой сервис использовать для бесплатного хранения видео для бэкенда на Django?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Полагаю - таких, чтобы без лютых костылей и бесплатных одновременно - нет.
    Разве что у амзаона есть бесплатный тир на 5ГБ/12 месяцев
    P.S., как вариант - найти бесплатный хостинг и написать прослойку на php, которая обрабатывала бы запросы, но там обычно малый объем места и отсутствие сертификатов
    Ответ написан
  • Почему при запуске dev-сервера на 0.0.0.0, не появляется доступ из локальной сети?

    AlexNest
    @AlexNest Автор вопроса
    Работаю с Python/Django
    Помогло разрешить доступ python`у и/или возможно, открытие 8000 порта.
    Ответ написан
    Комментировать
  • Аутентификация с помощью Django Simple JWT или своя аутентификация пользователя?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Судя по тому, что вы спрашиваете - кастомная аутентификация вам не нужна.
    к тому-же:
    1. JWT - сейчас де-факто стандарт на рынке (по крайней мере - один из).
    2. Почему бы вам не потестить в "реальных условиях" и если окажется, что по каким-то причинам, не хватает возможностей (при условии, что текущие возможности использовались по максимуму, как на беке, так и на фронте), написать что-то свое.
    3. К вопросу о написании своего метода - в 95% случаев можно переопределить отдельные компоненты (к примеру - расширить payload access-токена).
    Ответ написан
    Комментировать
  • Как автоматически создавать запись в одной таблице, при создании записи в другой (Django models)?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    from django.db.models.signals import post_save
    from django.dispatch import receiver
    
    
    # method for updating
    @receiver(post_save, sender=Zakaz)
    def update_stock(sender, instance, **kwargs):
        # instance - созданный объект, к которому можно обратится 
        # Здесь создавать объект

    UPD: в первом комменте - детальный пример.
    Ответ написан
    3 комментария
  • Как связать две формы в Django?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Добавьте вторую также как и первую:
    article_form = AddLectureForm()
            content_form = AddContentForm()
    
        context = {
            'article_form ': article_form,
            'content_form ': content_form 
        }
        return render(request, 'main/render.html', context)

    <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form_one.as_p }}
        {{ form_two.as_p }}
        <input type="submit" value="ok">
    </form>


    Конкретно, это чисто пример вывода форм. Обрабатывать две формы нужно также как и одну, только после сохранения первой из нее нужно получить id и передать во вторую.
    P.S.:
    Конкретно может помочь раздел про метод save()
    В коментах несколько моментов относительно текущей реализации.
    Ответ написан
  • Не могу сделать миграцию, как это решить?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Для начала - перевести ошибку.
    Ответ написан
    Комментировать
  • Как сделать счетчик?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    при нажатии "+" или "-" значение joke.joke_rating соответственно увеличивалось или уменьшалось на один?

    XMLHttpRequest (Ну или ajax из постепенно умирающей jquery) на фронте, и вьюха на беке, которая принимает id анекдота плюсует/минусует рейтинг

    И еще почему-то JavaScript работает (в данном случае нет) только для верхнего анекдота. Для остальных выводит корректно joke_rating. Почему так?

    По этому коду мне не понятно - рейтинг какой шутки следует вывести, учитывая что цикл закончился с десяток строк назад.
    <script type="text/javascript">
        var joke_rating = '{{ joke.joke_rating }}';
        document.getElementById('hi').innerHTML = joke_rating;
    </script>
    {% endblock %}

    к тому-же, вне зависимости от того, рейтинг какого анекдота будет в var joke_rating = '{{ joke.joke_rating }}';, значение запишется в первый элемент.
    Ответ написан
    3 комментария
  • Как переписать Django AnonymousUser с использованием DRF?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    С библиотекой не знаком, но в общем случае, когда переписывается модель юзера, то нужно указать ее в настройках.
    В случае с DRF и анонимусом по идее так.
    Ответ написан
    2 комментария
  • Как лучше реализовать?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    создать новую таблицу с нужными полями

    В целом - относительно рабочий, пусть и слегка грубоватый, на мой взгляд, вариант.
    добавить новые поля прямо в таблицу auth_user?

    1. Как вы себе это представляете? Переопределять данные на уровне загружаемого модуля - ужасная идея. Как минимум потому-что при размещении на сервере все зависимости придется ставить заново.
    2. Почему-бы не наследовать модель юзера и в ней уже добавить нужные поля, как-то так:
    # models.py
    
    def get_file_path(instance, filename):
        """
            get_file_path - генерирует случайное имя для аватара
        """
        ext = filename.split('.')[-1]
        filename = "%s.%s" % (uuid.uuid4(), ext)
        return os.path.join('avatars/%Y/%m/%d/', filename)
    ....
    
    class UserAccount(AbstractUser):
        """
            Расширенная модель пользователя. Добавлено
            отчество, аватар и необязательный внешний
            ключ к учебной группе.
        """
        avatar = models.ImageField(verbose_name='Аватар',
                                   upload_to=get_file_path, blank=True) 
        patronymic_name = models.CharField(verbose_name='Отчество',
                                           max_length=150,
                                           blank=True)
        study_group = models.ForeignKey(StudyGroup, on_delete=models.PROTECT,
                                        blank=True, null=True,
                                        verbose_name='Учебная группа')
    
    # settings.py
    AUTH_USER_MODEL = 'accounts.UserAccount'
    Ответ написан
    Комментировать
  • Что нужно знать перед изучением django?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    И нужно ли знать, как работает веб на низком уровне?

    Ну, по личному опыту скажу, что после пары лет ковыряния чистого php, вникнуть в джанго было как-то проще (наверное, не необходимо, но следующий пункт это должно покрыть почти полностью).
    Но вообще, для нормального начала работы достаточно вникнуть в прикладные моменты по типу http-методов, сессий, голой работы с базами данных, ну и хотя-бы немного почитать про протоколы передачи данных.
    Плюс отдельным пунктом - почитать о проектировании баз данных и их нормализацию в частности.
    Ответ написан
    Комментировать
  • Как вывести все данные из БД?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    1. Доки (ну или хотя бы статьи) по ORM django читали?
    2. Вы код сами писали?
    Что-то мне подсказывает, что в обоих случаях - нет, поскольку не понять как работает данный метод, имея даже минимальные знания по теме (да даже просто зная английский и дружа с логикой) очень просто.
    Choose.objects.get_or_create(voter=request.user)
    Он пытается найти подходящий объект, и если его нет - создает. Вот и все
    Ответ написан
  • Что нужно написать в HTML шаблоне на джанго, чтобы при нажатии на кнопку выдавалась рандомная ссылка?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    В общем случае - передавать в контекст все id и с помощью JS рандомить, после чего изменить/создать новую ссылку.
    (Как - можно посмотреть в первых ссылках в гугле для каждого из вариантов)
    Ответ написан
    Комментировать
  • Как правильно сделать рассылку уведомлений django?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Использовать асинхронные задачи.
    К примеру, с помощью celery.
    Ответ написан
    Комментировать
  • Как использовать оператор or в функции filter?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    from django.db.models import Q
    q1 = Q(sender=request.user)
    q2 = Q(reciever=request.user)
    D = Dialogue.objects.filter(q1|q2)
    Ответ написан
    Комментировать
  • Зачем сохранять результаты в Celery?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Суть в том, что задачи в очереди выполняются асинхронно и не будут ломать логику, которая идет дальше, если что-то случится.
    1. К примеру - на сайте регистрация происходит синхронно то, к примеру, если почтоввый сервис, с которого отправляются письма о регистрации ляжет то и вьюха, скорее всего, сломается (в целом, можно эксепшеном обработать как ошибку, но можно и так).
    2. Почтовый сервис может долго думать и пока не отправит таки письмо, вьюха будет "висеть". Поэтому задачи, которые могут занять некоторое время (в том числе и запись в бд) также запускают асинхронно.
    Ответ написан
  • Как инициализировать JS плагин в Django?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    По идее - можно (по крайней мере у меня jquery плагин для даты-времени работал нормально). Создаете форму как обычно, после чего в js-скрипте выбираете нужный input.
    P.S. Все скрипты/css в статике должны быть.
    Пример из архива плагина
    <!DOCTYPE html>
    <html>
    
    <head>
      <meta charset="utf-8">
      <title>International Telephone Input</title>
      <link rel="stylesheet" href="build/css/intlTelInput.css"> 
      <link rel="stylesheet" href="build/css/demo.css">
    </head>
    
    <body>
      <h1>International Telephone Input</h1>
      <form>
        {% csrf....
        {{ form.as_p }} // Форма
        <button type="submit">Submit</button>
      </form>
    
      <script src="build/js/intlTelInput.js"></script>
      <script>
        var input = document.querySelector("#phone"); // ID соответствующего инпута из формы
        window.intlTelInput(input, {
          // allowDropdown: false,
          // autoHideDialCode: false,
          // autoPlaceholder: "off",
          // dropdownContainer: document.body,
          // excludeCountries: ["us"],
          // formatOnDisplay: false,
          // geoIpLookup: function(callback) {
          //   $.get("http://ipinfo.io", function() {}, "jsonp").always(function(resp) {
          //     var countryCode = (resp && resp.country) ? resp.country : "";
          //     callback(countryCode);
          //   });
          // },
          // hiddenInput: "full_number",
          // initialCountry: "auto",
          // localizedCountries: { 'de': 'Deutschland' },
          // nationalMode: false,
          // onlyCountries: ['us', 'gb', 'ch', 'ca', 'do'],
          // placeholderNumberType: "MOBILE",
          // preferredCountries: ['cn', 'jp'],
          // separateDialCode: true,
          utilsScript: "build/js/utils.js", // Естественно скрипты должны быть в папке со статикой
        });
      </script>
    </body>
    
    </html>
    Ответ написан
    Комментировать
  • Как сделать отдельную страничку для каждого товара на django?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    # добавить путь в urls.py с ключем (к примеру lecture_id), 
    path('lections/<int:lecture_id>/', views.lections_detail, name='Curr_lecture'), # lecture_id
    # views.py в представлении, которое вызывает этот путь, передавать этот ключ (названия должны быть идентичны)
    def lections_detail(request, lecture_id): # lecture_id
        lect = Lecture.objects.get(id=lecture_id)

    А дальше как обычно выводить данные
    Ответ написан
  • Как через Django отправить Email, чтобы внутри был контент из HTML со стилями и картинками?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Использовать html_message
    send_mail(
            'Подтверждение регистрации', # Заголовок
            '', # Текстовое тело, которое не нужно
            settings.EMAIL_HOST_USER, 
            [mail],
            html_message=msg_html, # в html_message вставлять данные render_to_string
            fail_silently=False
    
        )
    Ответ написан
    2 комментария