【问题标题】:I am getting an a "TypeError" when trying to add a item to the database in Django尝试在 Django 中向数据库添加项目时出现“TypeError”
【发布时间】:2021-05-24 01:58:45
【问题描述】:

我正在尝试在数据库中添加一个项目,但我不断收到 TypeError,请问我做错了什么。我有它的模型类,我正在使用 Django ModelForm 来实现 Create 操作。

错误日志

Traceback (most recent call last):
  File "C:\Users\Habib\Documents\django\FIVERR\Alex_SMS\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "C:\Users\Habib\Documents\django\FIVERR\Alex_SMS\venv\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\Habib\Documents\django\FIVERR\Alex_SMS\SMS\core\views.py", line 26, in Addproduct
    form = Addproduct()

Exception Type: TypeError at /add-product/
Exception Value: Addproduct() missing 1 required positional argument: 'request'

models.py

class Product(models.Model):
    name = models.CharField(max_length=36)
    price = models.PositiveIntegerField()
    description = models.TextField()
    quantity = models.PositiveIntegerField()
    image = models.ImageField()
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

forms.py

from django import forms
from .models import *

class Addproduct(forms.ModelForm):
    class Meta:
        model = Product
        fields = '__all__'

views.py

def Addproduct(request):

    form = Addproduct()
    if request.method == 'POST':
        form = Addproduct(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            messages.success(request, "Products Added Successfully")
            return redirect('product')

    context = {"form":form}

    return render(request, "core/addstation.html", context)

【问题讨论】:

标签: python django django-models django-views django-forms


【解决方案1】:

您已为视图指定了与表单相同的名称,因此如果您调用Addproduct,它将调用视图,因为视图覆盖了对表单的引用。

我建议您将表单重命名为:

from django import forms
from .models import *

#          ↓ rename to …Form
class AddproductForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = '__all__'

并更新视图:

def add_product(request):

    form = AddproductForm()
    if request.method == 'POST':
        form = AddproductForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            messages.success(request, 'Products Added Successfully')
            return redirect('product')

    context = {'form':form}

    return render(request, 'core/addstation.html', context)

通常基于函数的视图是用snake_case编写的,所以add_product而不是AddProduct

【讨论】:

猜你喜欢
  • 2016-09-04
  • 1970-01-01
  • 2021-07-09
  • 2021-12-27
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多