Задать вопрос
  • Проблема с pip, no module 'pip'. Как вернуть?

    @Rick_Mint
    Вы уже, скорее всего, давно решили проблему, но вот решение для тех, кто забрел сюда с такой же проблемой (это решение помогло мне):

    если используете PyPy
    вводим в cmd " pypy3 -m ensurepip "
    потом вводим " pypy3 -m pip install --upgrade pip "

    если используете стандартный Python (CPython)
    вводим в cmd " python3 -m ensurepip "
    потом вводим " python3 -m pip install --upgrade pip "
    Ответ написан
    2 комментария
  • Как сделать редирект на указанный url Django?

    DmitryVoronkov
    @DmitryVoronkov
    Python Developer
    В настройках укажи куда тебе нужно делать редирект:
    settings.py:
    ...
    LOGIN_REDIRECT_URL = '/game/'
    ...


    Еще есть вариант использовать next
    Урл вида:
    <a href="{% url 'auth_login' %}?next=/game/">Auth</a>
    Ответ написан
    2 комментария
  • Зачем нужен reverse()?

    deepblack
    @deepblack Куратор тега Django
    reverse позволяет по имени вьюхи получить её url.

    from news import views
    
    path('archive/', views.archive, name='news-archive')


    from django.urls import reverse
    
    reverse('news-archive')


    get_absolute_url - позволяет получить канонический URL обьекта, при условии что этот метод определён.

    # Можно так:
    def get_absolute_url(self):
        return "/people/%i/" % self.id
    
    # Но лучше так:
    def get_absolute_url(self):
        from django.urls import reverse
        return reverse('people.views.details', args=[str(self.id)])


    <a href="{{ object.get_absolute_url }}">{{ object.name }}</a>


    Ну и в догонку:

    spoiler
    <!-- Так не надо делать -->
    <a href="/language/category/product/{{product.pk}}">Link</a>
    
    <!-- надо так -->
    <a href="{{product.get_absolute_url}}">Link</a>

    Ответ написан
    2 комментария
  • Зачем нужен reverse()?

    @Putigor
    Например, у нас есть такая страница в urls.py:
    urlpatterns = [
        path('articles/<int:year>/<int:month>/<int:day>/', views.day_archive, name='day_archive'),
        ...
    ]

    Мы можем во views.py сделать так:
    def ...
                    year = request.POST.get("year")
                    month = request.POST.get("month")
                    day = request.POST.get("day")
                    return HttpResponseRedirect('articles/' + year + '/' + month + '/' + day + '/')

    А можем вот так:
    from django.urls import reverse
    
    def ...
                    year = request.POST.get("year")
                    month = request.POST.get("month")
                    day = request.POST.get("day")
                    return HttpResponseRedirect(reverse('day_archive', args=[year, month, day]))
    Ответ написан
    Комментировать
  • Как зарегистрировать новый объект User в расширенную модель MyUser при помощи CreateView?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Если я правильно понял задачу, то как то так:
    # MyUser
    from django.contrib.auth.models import AbstractUser
    from django.db import models
    
    class MyUser(AbstractUser):
        # ...
        class Meta:
            swappable = 'AUTH_USER_MODEL'

    # MyUserCreationForm
    from django import forms
    from django.contrib.auth.forms import UserCreationForm
    from .models import MyUser
    
    class MyUserCreationForm(UserCreationForm):
        class Meta:
            model = MyUser
            fields = ('username', 'password1', '...')

    # view
    from django.urls import reverse_lazy
    from django.views.generic.edit import CreateView
    from .forms import MyUserCreationForm
    from .models import MyUser
    
    class MyUserCreateView(CreateView):
        model = MyUser
        form_class = MyUserCreationForm
        template_name = 'registration/registration_form.html'
        success_url = reverse_lazy('blog:index')

    # urls
    from django.urls import path, include
    from .views import MyUserCreateView
    
    urlpatterns = [
        path('auth/', include('django.contrib.auth.urls')),
        path('auth/registration/', MyUserCreateView.as_view(), name='registration'),
    ]
    Ответ написан
    1 комментарий
  • Почему перестал работать Emmet в VS?

    IlyaVishnikin
    @IlyaVishnikin
    измени бинды для эмета или джанго темплейта в настройках
    PS. https://code.visualstudio.com/docs/getstarted/keyb... тут написано о биндах
    Ответ написан
    3 комментария
  • Как проверить что пользователь это автор в Django?

    syschel
    @syschel
    freelance/python/django/backend
    Проверяем авторизирован пользователь? Если да, то отдаём только те посты, где он является автором.
    Если же пользователь не авторизирован, то отдаём всё остальное по вашим фильтрам
    class PostListView(ListMixin, ListView):model = Post
        ordering = '-pub_date'
        paginate_by = 10
        template_name = 'blog/index.html'
    
        def get_queryset(self):
            queryset = super().get_queryset().all( ).annotate(comment_count=Count("comments"))
            
            if self.request.user.is_authenticated  # Проверяем пользователь авторизованный или нет
                return queryset.filter(author=self.request.user) 
            return queryset.filter(category__is_published=True, 
                                              is_published=True,
                                              pub_date__lte=timezone.now())


    get_object_or_404 - Достаёт только один объект, вы же хотите получить список, судя по названию класса. При этом если вдруг не найдётся ни одной записи, то будет вызвана принудительная ошибка 404. То есть далее ваш код выполняться не будет.

    Если же нужно проверить есть ли у авторизированного хоть один пост, в противном случае считаем его не "автором", то так:

    def get_queryset(self):
            queryset = super().get_queryset().all( ).annotate(comment_count=Count("comments"))
            
            if self.request.user.is_authenticated  # Проверяем пользователь авторизованный или нет
                queryset =  queryset.filter(author=self.request.user) 
            if not queryset:  # либо можно так - if not len(queryset): 
                queryset = queryset.filter(category__is_published=True, 
                                                  is_published=True,
                                                  pub_date__lte=timezone.now())
            return queryset


    Но если у вас понятие "автор" определяется не только наличием созданных им постов. То лучше вносить в модель пользователей статус автор он или нет.
    class User(models.Model):
        ....
        is_author = models.BooleanField(default=False)
        ...

    И тогда проверка уже будет такой

    ...
        def get_queryset(self):
            queryset = super().get_queryset().all( ).annotate(comment_count=Count("comments"))
            
            if self.request.user.is_authenticated and self.request.user.is_author:
                return queryset.filter(author=self.request.user) 
            return queryset.filter(category__is_published=True, 
                                              is_published=True,
                                              pub_date__lte=timezone.now())

    Естественно, если пользователь автор, но постов создать не успел, то ему вернётся пустой список.
    Ответ написан
    2 комментария
  • Как получить доступ к полям связанного объекта через 2 таблицы в Django?

    Mi11er
    @Mi11er
    A human...
    Как то так .. в обратку так же работает =)

    class ModelBase(models.Model):
        title = models.CharField(_("Название"), max_length=250, blank=False)
    
        def __str__(self):
            return self.title
    
    
    class Model(ModelBase):
        some = models.CharField(_("Что то "), max_length=250)
    
    class Model1(ModelBase):
        some = models.CharField(_("Что то "), max_length=250)
        m = models.ForeignKey(Model, on_delete=models.CASCADE)
    
    class Model2(ModelBase):
        some = models.CharField(_("Что то "), max_length=250)
        m1 = models.ForeignKey(Model1, on_delete=models.CASCADE)
    
    class Model3(ModelBase):
        some = models.CharField(_("Что то "), max_length=250)
        m2 = models.ForeignKey(Model2, on_delete=models.CASCADE)


    from core.models import *
    m1 = Model.objects.all()
    m1[0].model1_set
    <django.db.models.fields.related_descriptors.create_reverse_many_to_one_manager.<locals>.RelatedManager object at 0x00000296EFFAAE20>
    
    m1[0].model1_set.all()[0].model2_set.all()[0].model3_set.all()[0].some
    'some m3'
    Ответ написан
    2 комментария
  • Как получить доступ к полям связанного объекта через 2 таблицы в Django?

    Представим 2 модели Post и Category. В модели Post поле со свзяью(назовем это поле cat) foreignkey с Category(т.е Post-вторичная модель, Category - первичная). Если мы хотим через модель Post обратиться к Category: Post.objects.filter(cat__id=1). Тут был пример фильтрации постов, у которых категория с id=1. То есть мы ищем посты у которых категория самая первая (по id).Если мы хотим обраться через Category к модели Post (обратная связь), то тут надо использовать менеджер обратной связи ( [имя вторичной модели]_set или использовать свойство related_name, если оно определено у поля cat ). К примеру:
    cat = Category.objects.get(id=1) - получение категории с  id=1

    И теперь через менеджер обратной свзязи ( в нашем случае, если related_name не указан - будет post_set, если же related_name указан используем его). cat.post_set.all() - выводим все посты принадлежащие cat, категории с id =1. Надеюсь я то, что нужно обьяснил?
    Ответ написан
    Комментировать
  • Как посчитать количество комментариев под постом с помощью annotate()?

    @Everything_is_bad
    https://docs.djangoproject.com/en/5.0/topics/db/ag... ну и annotate с comment_count делается к Post, в твоем случае вообще лучше annotate добавить в get_queryset
    Ответ написан
    3 комментария
  • Как сделать так чтобы CBV-функция DetailView в Django принимала объект по slug?

    datka
    @datka
    slug_field

    slug_field¶
    The name of the field on the model that contains the slug. By default, slug_field is 'slug'.

    slug_url_kwarg¶
    The name of the URLConf keyword argument that contains the slug. By default, slug_url_kwarg is 'slug'.


    urlpatterns = [
        path("<slug:slug>/", ArticleDetailView.as_view(), name="article-detail"),
    ]


    Точнее можете глянуть тут
    Ответ написан
    Комментировать