Тип объекта 'ProductForm' не имеет атрибута 'cleaned_data' django - PullRequest
0 голосов
/ 06 сентября 2018

Я делаю форму, используя Django 2.0.x и Python 3.6, и получаю ошибку

Я не уверен, что происходит, кто-нибудь может мне помочь? Спасибо!

Продукт / forms.py

from django import forms
from .models import Product

class ProductForm(forms.ModelForm):
    title       = forms.CharField(label='',
                    widget=forms.TextInput(attrs={"placeholder": "Your title"}))
    description = forms.CharField(
                        required=False,                         
    widget=forms.Textarea())
    class Meta:
        model = Product
        fields = [
            'title',
            'description',

        ]

Продукт / views.py

from django.shortcuts import *
from django.http import *
from .models import Product
from .forms import ProductForm
import hashlib

# Create your views here.

def home_view(request,slug,*args,**kwargs):
    form= ProductForm(request.POST or None)
    try:
        productobject=Product.objects.get(id=1)
    except Product.DoesNotExist:
        raise Http404

    if form.is_valid():

        newProduct=Product.objects.create(
        title = "jose",

        description=ProductForm.cleaned_data.get["description"]


        )

        if newProduct:
            return HttpResponseRedirect("/)

        else:
            newProduct = ProductForm()

context= {
        "sampletext": "text",
        "form": form,
        "productobject":productobject,

    }
    return render(request, "home.html",context)

Код дает мне эту ошибку

Объект типа «ProductForm» не имеет атрибута «cleaned_data»

1 Ответ

0 голосов
/ 06 сентября 2018

Вы получаете cleaned_data из класса ProductForm , а не из объекта form, который является экземпляром из ProductForm.

Таким образом, вы можете исправить это, используя вместо этого form, например:

def home_view(request,slug,*args,**kwargs):
    form= ProductForm(request.POST or None)
    try:
        productobject=Product.objects.get(id=1)
    except Product.DoesNotExist:
        raise Http404

    if form.is_valid():

        newProduct=Product.objects.create(
            title = "jose",
            description=<b>form</b>.cleaned_data.get["description"]
        )
        if newProduct:
            return HttpResponseRedirect("/")
        else:
            newProduct = ProductForm()
    context= {
        "sampletext": "text",
        "form": form,
        "productobject":productobject,

    }
    return render(request, "home.html",context)

Но, как говорится, рабочий процесс не является идиоматическим . Например, if newProduct всегда будет успешным, независимо от того, является ли это действительным newProduct или нет. Однако Product.objects.create(..) может вызвать исключение. Более идиоматический рабочий процесс:

def home_view(request,slug,*args,**kwargs):
    try:
        productobject=Product.objects.get(id=1)
    except Product.DoesNotExist:
        raise Http404
    if request.method = 'POST':
        form = ProductForm(request.POST)
        if form.is_valid():
            form.instance.title = "jose"
            form.save()
            return redirect('home')  # name of the view
    else:
        form = ProductForm()
    context= {
        "sampletext": "text",
        "form": form,
        "productobject":productobject,

    }
    return render(request, "home.html",context)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...