首页 > 解决方案 > Django 属性错误 - 表单对象没有属性“is_valid”

问题描述

尝试将表单数据插入表单时,我收到一个错误,对象没有属性“is_valid”。下面是我的代码结构:

视图.py:

def add_user(request):
    form = Car(request.POST)
    if request.method == 'POST' and form.is_valid():
        last_store = form.cleaned_data.get['value']
        make = request.POST.get('make', '')
        model = request.POST.get('model', '')
        ..

        car_obj = Car(last_store = last_store, make = make, model = model, series = series, series_year = series_year, price_new = price_new, engine_size = engine_size, fuel_system = fuel_system, tank_capacity = tank_capacity, power = power, seating_capacity = seating_capacity, standard_transmission = standard_transmission,  body_type = body_type, drive = drive, wheelbase = wheelbase, available = available)
        car_obj.save()
        return HttpResponseRedirect('/inventory/add/')
    else:
        form = Car()

    return render(request, 'cars/inventory-add.html', {})

班级:

class Car(models.Model):
    make = models.CharField(max_length=200, null=False)
    model = models.CharField(max_length=200, null=False)
    series = models.CharField(max_length=200, null=False)
    series_year = models.IntegerField(null=False)
    price_new = models.IntegerField(null=False)
    ..
    last_store = models.ForeignKey(Store, on_delete=models.DO_NOTHING, related_name="last_store")
    available = models.BooleanField(null=False, default=True)

    def __str__(self):
        return(self.make + " " + self.model)

CarForm (forms.py)

class CarForm(forms.ModelForm):
    class Meta:
        model = Car
        fields = ['last_store', 'make', 'model', 'series', 'series_year', 'price_new', 'engine_size', 'fuel_system', 'tank_capacity', 'power', 'seating_capacity', 'standard_transmission', 'body_type', 'drive', 'wheelbase', 'available']

错误在于last_storeas without form.is_valid(),显然我不能使用form.cleaned_data,但form.is_valid()似乎甚至不存在?正如在课堂上看到的那样,last_store它的类型是外键,因此当用户在表单中输入输入时,我正在努力为其设置默认值。该last_store变量正在尝试从包含 SELECT 选项的输入表单数据中获取值。

标签: pythondjango

解决方案


您的模型和表单之间存在冲突,它们都命名为Car. 通常,您可以通过重命名表单来解决此问题CarForm

请注意,您通常不需要使用car_obj = Car(...). 如果您使用模型形式,您可以将您的代码简化为car_obj = form.save(). 您还应该CarForm(request.POST)if request.method == 'POST'检查中移动,并包含form在模板上下文中。把它们放在一起,你会得到类似的东西:

def add_user(request):
    if request.method == 'POST':
        form = CarForm(request.POST)
        if form.is_valid():
            car_obj = form.save()
            return HttpResponseRedirect('/inventory/add/')
    else:
        form = CarForm()
    return render(request, 'cars/inventory-add.html', {'form': form})

推荐阅读