Как избавиться от избыточных запросов ord django

class Post(models.Model):
    cat_post = models.ForeignKey(Category, on_delete=models.CASCADE, blank=True,null=True)
    top_post = models.ForeignKey(TopicsCategory, on_delete=models.CASCADE, blank=True,null=True)
    sub_post = models.ForeignKey(SubTopicsCategory, on_delete=models.CASCADE, blank=True,null=True)
class CreatePostView(CreateView):
    model = Post
    template_name = 'blog/create.html'
    form_class = CreatePostForm

    def get_context_data(self, *args, **kwards):
        print(self.kwargs)
        context = super(CreatePostView, self).get_context_data(**kwards)
        context['btn'] = 'Add'
        return context


    def form_valid(self, form, *args, **kwargs):
        if self.kwargs.get('category_slug') and len(self.kwargs) == 1:
            category = Category.objects.get(slug=self.kwargs['category_slug'])
            form.instance.cat_post = category
            return super(CreatePostView, self).form_valid(form)

    # передача в форму kwargs view
    def get_form_kwargs(self):
        kwargs = super(CreatePostView, self).get_form_kwargs()
        kwargs.update({'view_kwargs': self.kwargs})
        return kwargs

    def get_success_url(self):
        return reverse('topics_category_list', kwargs={'category_slug': self.kwargs['category_slug'], })
class CreatePostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['name', 'text', 'discussion']
        # widgets = {
        #     'cat_post': forms.HiddenInput(),
        # }

    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop("view_kwargs")
        super(CreatePostForm, self).__init__(*args, **kwargs)

    def clean_name(self):
        name = self.cleaned_data['name']
        if self.request.get('category_slug') and len(self.request) == 1:
            category = Category.objects.get(slug=self.request['category_slug'])
            unique = Post.objects.filter(slug=slugify(self.cleaned_data['name']), cat_post=category.pk,discussion=False).exists()
            if unique:
                raise ValidationError(f'Post is not unique')
            return name

**

У меня есть дублирующие источники в db здесь form_valid и clean_name. Как мне передать форму в экземпляре класса view form_valid, который я получил из базы данных, в clean_name. Будут посты для 2 моделей и запросы будут расти

Вернуться на верх