Ответы пользователя по тегу Django
  • Как передать контекст в Class-based validator?

    @ATNC Автор вопроса
    Full-stack web\python developer
    class DeadlineValidator:
        requires_context = True
    
        def set_context(self, serializer_field):
            instance = serializer_field.parent.instance
    
        def __call__(self, value):
    
            if value < timezone.now():
                raise ValidationError('Error')
    
            return value


    Нашел решение
    Ответ написан
    Комментировать
  • Можно ли обойтись вообще без шаблонов в Django?

    @ATNC
    Full-stack web\python developer
    Конечно. Рендеринг шаблонов в Django - это всего лишь одна из батареек, которые вы можете использовать. В мире Single Page Application этой опцией Django никто не пользуется, потому-что для приложения нужно всего-лишь получить набор "сырых" данных, в основном в JSON формате. Вы можете построить свое приложение которое будет работать с JSON с помощью стандартных методов Django, но лучше всего для этого подходит Django Rest Framework. DRF позволит с минимальным количеством кода написать рабочее приложение для работы с VueJS. Вам нужно будет только сосредоточиться на бизнес логике, все остальное за Вас сделает DRF.
    Ответ написан
    Комментировать
  • Как задать действие при создании пользователя в Django?

    @ATNC
    Full-stack web\python developer
    Вот хороший туториал по сигналам. Можете использовать его
    https://simpleisbetterthancomplex.com/tutorial/201...
    Ответ написан
    Комментировать
  • Отложенная рассылка уведомлений: как в Django ежеминутно проверять, пора ли выполнять скрипт?

    @ATNC
    Full-stack web\python developer
    Можно использовать очень маленькую библиотечку для решения Вашей задачи.
    Буквально в 3 строки можно написать работающий скрипт.
    https://github.com/coleifer/huey
    Ответ написан
    Комментировать
  • Как правильно объявить пользовательский тег в Django?

    @ATNC
    Full-stack web\python developer
    Для того, чтобы сделать тег доступным во всех вьюхах, можно добавить его в сетинги темплейтов.
    settings.py
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [],
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
               'builtins': 'app.templatetags.extratags' # <<<<<<<<<<<<<<<
            },
        },
    ]

    Но для решение даной задачи лучше подойдет глобальный контекст.
    global_context.py
    def get_lenta_elem(request):
        items = Product.objects.all()
        return  {'items': items }

    и в settings.py добавь функцию в глобальный контекст
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [],
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                    # custom context processor
                    'путь_к_файлу.навание_метода' # <<<<<<<<<<<<<
                ],
            },
        },
    ]

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

    @ATNC
    Full-stack web\python developer
    Лучше будет сделать другую с ForeignKey на документ. Таким образом Вы "инкапсулируете" объект файла и сможете в будущем расширять модель. К примеру сохранять время загрузки файла и т.д.
    Ответ написан
    Комментировать
  • Как проверить радиобаттон выбран или не выбран?

    @ATNC
    Full-stack web\python developer
    Если в радиобаттоне не приписан атрибут value, то по дефолту будет приходить "on". Если есть несколько радиобатонов, и нужно различать какой выбран, нужно задать атрибут value у каждого радио ( также не забыть задать атрибут name). Например:
    <input type="radio" name="choice" value="choice1">
    <input type="radio" name="choice" value="choice2">
    <input type="radio" name="choice" value="choice3">


    При отправке формы на сервер будет приходить значение из value. Например если выбран первый батон, в реквест будет приходить choice1. Пример:
    choice = request.POST['choice']
    print(choice)
    >>> choice1


    Еще рекомендую брать значение из dict с помощью get. Так Вы сможете избежать ошибки. К примеру:
    choice = request.POST.get('choice', None)
    if choice:
        делать ваш код
    else:
        вы не выбрали батон


    UPD: Если радиобаттон не выбран - его значение не будет приходить на сервер
    Ответ написан
    4 комментария
  • Объясните суть приложений в django?

    @ATNC
    Full-stack web\python developer
    Приложение - это "инкапсуляция" модулей, которые занимаются задачами одного типа.
    Например приложение "auth" занимается работой с пользователем - авторизацией, аутентификацией, регистрацией.
    Приложение "blog" занимается написанием, публикацией постов - это значит что в этом приложении находится код, который отвечает только за сущности блога.
    В блоге есть посты, и каждый пост может быть привязан к пользователю. Получается что в даном случае приложение "auth" взаимодействует с приложением "blog".
    Ответ написан
    Комментировать
  • Как в Django ограничить видимость полей экземпляра модели?

    @ATNC
    Full-stack web\python developer
    Можно попробовать в admin.py переопределить метод get_form и при инициализации формы сделать там проверку на юзера, например:
    class SupplyAdmin(admin.ModelAdmin):
       available_fields = ('name', 'field1', 'field2')
       hidden_fields = ('field3',)
       def get_form(self, request, obj, **kwargs):                             
           if request.user.username == 'example@example.com':                                            
               self.fields = self.available_fields + self.hidden_fields         
           else:                                                                    
               self.fields = self.available_fields
    
            return super(SupplyAdmin, self).get_form(request, obj, **kwargs)
    Ответ написан
    3 комментария
  • Python-social-auth KeyError. Как устранить эту ошибку при использовании одноклассников?

    @ATNC Автор вопроса
    Full-stack web\python developer
    Перепутал SOCIAL_AUTH_ODNOKLASSNIKI_APP_PUBLIC_NAME с SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_PUBLIC_NAME
    Ответ написан
    Комментировать
  • Как объединить два цикла for?

    @ATNC
    Full-stack web\python developer
    вы можете получить объекты, которые "привязаны" к вашей модели добавив related_name.
    Например:

    models.py
    class ItemAttributeValue(models.Model):
        att1 = .....
        att2 = .....
        item = models.ForeignKey(ItemAttribute, related_name='attribute')


    views.py
    characteristics = ItemAttribute.objects.get(category=3)


    index.html
    {% for i in characteristics %}
    {{ i.name}}
    ...
    {{ i.attribute.att1}}
    ...
    {% endfor %}
    Ответ написан
  • Как заставить nginx найти static файлы?

    @ATNC
    Full-stack web\python developer
    collectstatic делали?
    Ответ написан
  • Есть ли более изящное решение?

    @ATNC
    Full-stack web\python developer
    В атрибуте store модели Phones добавьте related_name:
    class Phones(models.Model):
        phone = models.CharField(max_length=50)
        store = models.ForeignKey(Store, related_name='phone_number')


    После этого Вы сможете из модели Store достучаться до телефона вот так:

    store = Store.objects.get(pk=1)
    phone_num = store.phone_number.phone


    Также Вы можете использовать связное имя в шаблонах. Как то так...

    {% if stores %}
        <div class="footer-col-2">
            <div class="col-name">Наши магазины</div>
            <ul class='stores'>
            {% for store in stores %}
                <li>
              
                    
                        <span>{{ store.name }} - {{ store.address }}</span>
                  
                    <ul>
                        
                        <li>{{ store.phone_number.name }}: {{ store.phone_number.phone }}</li>
                       
                    </ul>
                  
               
                </li>
            {% endfor %}
            </ul>
        </div>
    {% endif %}
    Ответ написан
    Комментировать
  • Django. Загрузка изображений. MultiValueDictKeyError. Что делать?

    @ATNC
    Full-stack web\python developer
    Попробуйте сделать что-то на подобии такого:
    добавьте в клас UserProfile
    User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])

    Эта конструкция даст возможность для доступа к профайлу через атрибут profile. Например, user.profile.picture

    Потом во вьюхе добавьте
    if request.POST:
            form = UserProfileForm(request.POST, request.FILES, instance=request.user.profile)
            if form.is_valid():
                form.save()
    Ответ написан
    Комментировать