не вернул HttpResponse - PullRequest
1 голос
/ 08 мая 2020

Доброе утро, когда я пытаюсь отправить форму, я получаю сообщение об ошибке, а когда я ее отправляю, оно показывает, что мое представление не возвращает никаких объектов httpresponse.

это представление

class ProductView(View):
    template_name = 'products/product.html'
    model = Product
    form_class = ProductForm

    def get_queryset(self):
        return self.model.objects.filter(state=True)

    def get_context_data(self, **kwargs):
        context = {}
        context['product'] = self.get_queryset()
        context['list_product'] = self.form_class
        return context

    def get(self, request, *args, **kwargs):
        return render(request, self.template_name, self.get_context_data())

    def post(self, request, *args, **kwargs):
        list_product = self.form_class(request.POST)
        if list_product.is_valid():
            list_product.save()
            return redirect('products:product')

и это форма

class ProductForm(forms.ModelForm):
    name_product = forms.CharField(
        max_length=25,
        widget=forms.TextInput(
            attrs={
                'class': 'form-control',
                'id': 'name_product',
            }
        )
    )

    def clean_name_product(self):
        name_product = self.cleaned_data.get('name_product')
        if Product.objects.filter(name_product=name_product).exists():
            raise forms.ValidationError('El nombre del producto ya existe')
        return name_product

    class Meta:
        model = Product
        fields = (
            'name_product', 'description', 'price', 'category', 'state', 'image'
        )
        labels = {
            'name_product': 'Nombre del Producto',
            'description': 'Descripcion',
            'price': 'Precio',
            'category': 'Categoria',
            'state': 'Estado',
            'image': 'Imagen del Producto',
        }
        widgets = {
            'name_product': forms.TextInput(
                attrs={
                    'class': 'form-control',
                    'id': 'name_product',
                }
            ),
            'description': forms.TextInput(
                attrs={
                    'class': 'form-control',
                    'id': 'description',
                }
            ),
            'price': forms.NumberInput(
                attrs={
                    'class': 'form-control',
                    'id': 'price',
                }
            ),
            'category': forms.SelectMultiple(
                attrs={
                    'class': 'custom-select',
                    'id': 'category',
                }
            ),
            'state': forms.CheckboxInput(),
        }

, когда я даю send, он генерирует ошибку. View products.views.ProductView не вернул объект HttpResponse. Вместо этого он вернул None.

Вначале я думал, что ошибка связана с поднятием ошибки в форме, измените код без проверки, и это сгенерирует ту же ошибку

1 Ответ

2 голосов
/ 08 мая 2020

В случае сбоя form.is_valid() вы ничего не возвращает в методе post, отсюда и ошибка. При этом, по сути, это всего лишь CreateView [Django -doc] , поэтому, возможно, лучше использовать его, чтобы уменьшить количество «шаблонного» кода:

from django.views.generic.edit import <b>CreateView</b>

class ProductView(<b>CreateView</b>):
    template_name = 'products/product.html'
    model = Product
    form_class = ProductForm

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context.update(
            product=Product.objects.filter(state=True),
            list_product=context['form']
        )
        return context
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...