• Не работает prefetch_related в django?

    timofeydeys
    @timofeydeys
    Свобода творцов
    def post_list(request):
        clients = Client.objects.prefetch_related('contacts').all()
        return render(request, 'blog/post_list.html', {'clients': clients})


    Надо так))
    def post_list(request):
        clients = Client.objects.all().prefetch_related('contacts')
        return render(request, 'blog/post_list.html', {'clients': clients})


    А если ты хочешь вложенный запрос сделать, по определенному queryset, тогда так:

    from django.db.models import Prefetch
    
    def post_list(request):
        clients = Client.objects.all().prefetch_related(Prefetch('contacts', queryset=Contanct.objects.all()))  # В Queryset скармливаешь просто queryset и делается вложенный запрос.
        return render(request, 'blog/post_list.html', {'clients': clients})
    Ответ написан
    Комментировать
  • Как исключить повторяющиеся записи из QuerySet?

    timofeydeys
    @timofeydeys Автор вопроса
    Свобода творцов
    Вопрос снят. В итоге сделал так.
    Discussion.objects.all().annotate(
                    comment_old_date=Max(
                        Case(
                            When(
                                comments__date_create__isnull=True,
                                then=datetime.datetime.strptime('1950-01-01 00:00:00', '%Y-%m-%d %H:%M:%S')
                            ),
                            default='comments__date_create'
                        )
                    )
                ).order_by('-comment_old_date')
    Ответ написан
    Комментировать
  • Как ввести строку и разбить ее на части?

    timofeydeys
    @timofeydeys
    Свобода творцов
    # Самый правильный способ, юзать генераторы. Они самые шустрые и простые. И вообще одна и важных фич питона)))
    string = "1234567890"  # СТроки в питоне, итерируемые объекты.
    int_list = [int(i) for i in string]
    # Вместо int(i) можно проводить любые махинации на этим самым i
    Ответ написан
    Комментировать
  • Как реализовать сборщик данных с постов группы facebook на python?

    timofeydeys
    @timofeydeys
    Свобода творцов
    С такими запросами, надо доставать кошелек и идти на фриланс.
    Ответ написан
    Комментировать
  • Django ORM. Почему при создании миграций появляется ошибка OperationalError: no such table?

    timofeydeys
    @timofeydeys
    Свобода творцов
    Потому что при простом python manage.py makemigrations полностью поднимается окружение с сетингами. А т.к. forms.py где то импортиться, то джанга при старте его видит, а в БД таблику не видит. Потому и ошибка.
    Надо сначала писать модельки, потом миграции, потом все остальное. Либо Пока не сделаны миграции, не обращаться к БД. Ты своей AreasWork.objects.all() формируешь запрос к БД, вот и все.
    Ответ написан
    Комментировать
  • Почему ругается csrf на анонимного юзера?

    timofeydeys
    @timofeydeys
    Свобода творцов
    Для запросов с отправкой данных, необходимо правильно формировать заголовок, а именно устанавливать заголовок X-CSRFToken: {{ csrf_token }} в ajax запросах. Тут написано больше: https://www.djbook.ru/rel1.9/ref/csrf.html
    Ответ написан
    Комментировать
  • Как определить в админке django свой BaseModelFormSet?

    timofeydeys
    @timofeydeys Автор вопроса
    Свобода творцов
    Вопрос снят. Надо вместе BaseModelFormSet наследовать BaseInlineFormSet
    Ответ написан
    Комментировать
  • Какие сервисы позволяют переводить биткоин?

    timofeydeys
    @timofeydeys Автор вопроса
    Свобода творцов
    Всем спасибо. Нашел эту систему, комисси ноль, и позволяет делать то что я хочу gourl.io
    Ответ написан
    Комментировать
  • Какой принцип отправки формы заказа на телефон в смс?

    timofeydeys
    @timofeydeys
    Свобода творцов
    Отправляется смс с сервера. Вам нужно либо поднимать собственный сервер, либо использовать готовые сервисы(они обычно платные). Т.е. передаете данные на сервер, как вы и делаете запросом. А сервер уже отправляет
    Ответ написан
    3 комментария
  • Django как создать юзера с расширенной моделью?

    timofeydeys
    @timofeydeys Автор вопроса
    Свобода творцов
    Вот мой код, если кому интересно
    forms.py
    class UserCreationForm(forms.ModelForm):
        password1 = forms.CharField(
            label='passwd',
            widget=forms.PasswordInput(attrs={
                'style':'margin:10px; padding:10px;height:40px',
                'class':'form-control col-sm-8',
                    'placeholder': 'Password please'
            })
        )
        password2 = forms.CharField(
            label='double passwd',
            widget=forms.PasswordInput(attrs={
                'style':'margin:10px; padding:10px;height:40px',
                'class':'form-control col-sm-8',
                    'placeholder': 'Double password please'
            })
        )
    
        def clean_password2(self):
            password1 = self.cleaned_data.get('password1')
            password2 = self.cleaned_data.get('password2')
            if password1 and password2 and password1 != password2:
                raise forms.ValidationError('Passwd and double passwd error')
            return password2
    
    
        def save(self, commit=True):
            user = super(UserCreationForm, self).save(commit=False)
            user.set_password(self.cleaned_data['password1']) # важно тут передавать password1 или 2. Но не password как в примере выше
            if commit:
                user.save()
            return user
        
    
        class Meta:
            model = get_user_model()
            fields = ('email', 'lastname', 'firstname')
            widgets = {
                'email': forms.TextInput(attrs={
                    'style':'margin:10px; padding:10px;height:40px',
                    'class':'form-control col-sm-8',
                    'placeholder': 'E-mail please'
                }),
                'lastname': forms.TextInput(attrs={
                    'style':'margin:10px; padding:10px;height:40px',
                    'class':'form-control col-sm-8',
                    'placeholder': 'Lastname please'
                }),
                'firstname': forms.TextInput(attrs={
                    'style':'margin:10px; padding:10px;height:40px',
                    'class':'form-control col-sm-8',
                    'placeholder': 'Firstname please'
                }),
            }


    Вот вьюха:
    def registerPost(request):
        if request.method == "POST":
            user_form = UserCreationForm(request.POST)
            
            if user_form.is_valid():
                new_user = user_form.save(commit=False)
                new_user.set_password(user_form.cleaned_data['password1'])
                new_user.avatar = "fotos/no_image_dummy.png"
                new_user.save()
                return HttpResponseRedirect("/login")
        else:
            user_form = UserCreationForm()
        return render(request, 'register.html', {'form':user_form})
    Ответ написан
    Комментировать
  • Как динамически добавлять приложения в ВК?

    timofeydeys
    @timofeydeys Автор вопроса
    Свобода творцов
    Исходя из вышенаписанного, как мне делать эти запросы? Т.е. API VK такие вещи не позволяет делать, а вручную у них кука одна только здоровенная, и токены имеет всякие.
    Ответ написан
    Комментировать
  • Python + json, почему не серилизуется массив?

    timofeydeys
    @timofeydeys Автор вопроса
    Свобода творцов
    Скорее всего в ваших объектах есть несериализуемые типы. Попробуйте преобразовать через json.dumps(t) и отловить эксепшен.


    Вот модель:
    class Tiket(models.Model):
        user = models.ForeignKey(User)
        name = models.CharField(max_length=350)
        info = models.TextField()
        sost = models.BooleanField(default=True)  # True - открыт тикет
        date = models.DateTimeField('Дата создания')
        manager = models.ForeignKey(Manager_cab)  # Прикреплен ли менеджер
        new_mess = models.BooleanField(default=False)
        kol_mess = models.IntegerField(default=0)


    dumps не серилизует. Тоже самое выдает.
    Ответ написан
    Комментировать