Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 属性错误位于/products/1/buy/&x27;订单';对象没有属性';保存';_Python_Django - Fatal编程技术网

Python 属性错误位于/products/1/buy/&x27;订单';对象没有属性';保存';

Python 属性错误位于/products/1/buy/&x27;订单';对象没有属性';保存';,python,django,Python,Django,我正在尝试建立一个django表单,以便在我的电子商务网站上下订单。但是,当我按下下订单按钮时,会出现以下回溯错误: Internal Server Error: /products/1/buy/ Traceback (most recent call last): File "C:\Users\Dell\Desktop\Django\apnibakery\venv\lib\site-packages\django\core\handlers\exception.py",

我正在尝试建立一个django表单,以便在我的电子商务网站上下订单。但是,当我按下
下订单
按钮时,会出现以下回溯错误:

Internal Server Error: /products/1/buy/
Traceback (most recent call last):
  File "C:\Users\Dell\Desktop\Django\apnibakery\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "C:\Users\Dell\Desktop\Django\apnibakery\venv\lib\site-packages\django\core\handlers\base.py", line 179, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\Dell\Desktop\Django\apnibakery\bakery\apnibakeryy\views.py", line 33, in buy
    form.save()
AttributeError: 'OrderForm' object has no attribute 'save'
[07/Dec/2020 14:06:34] "POST /products/1/buy/ HTTP/1.1" 500 64996
这是我的
订单

class OrderForm(forms.Form):
    name = forms.CharField(max_length=30)
    email = forms.EmailField()
    address = forms.CharField(widget=forms.Textarea())
    zip_code = forms.CharField(min_length=6,max_length=6)
处理订单的My view函数:

def buy(request,id):
    product = Product.objects.get(id=id)
    form = OrderForm()

    if request.method == 'POST':
        form = OrderForm(data=request.POST)
        if form.is_valid():
            form.save()
            return HttpResponse("Your order has been successfully placed!!")
    context = {
        'form':form,
        'product':product,
    }
    return render(request, 'buy_page.html',context)

我以前从未遇到过这个错误。有人能帮我吗?

你应该使用
表单。ModelForm
而不是
表单。表单

class OrderForm(forms.ModelForm):
    name = forms.CharField(max_length=30)
    email = forms.EmailField()
    address = forms.CharField(widget=forms.Textarea())
    zip_code = forms.CharField(min_length=6, max_length=6)
类订单(forms.ModelForm):
name=forms.CharField(最大长度=30)
email=forms.EmailField()
address=forms.CharField(widget=forms.Textarea())

zip\u code=forms.CharField(最小长度=6,最大长度=6)
A
Form
没有
.save()
方法。不清楚这意味着什么,因为例如,
表单
不是针对模型定制的。例如,它可以不在数据库中创建或更新记录

但是,您可以自己实现
save()
方法。例如,将发送电子邮件的方法:

class OrderForm(forms.Form):

    # …

    def save(self):
        cleaned_data = self.cleaned_data
        # …

有关发送电子邮件的更多信息,请参阅。

订单是一个
表单,而不是
模型表单,因此它没有
.save()
方法。但是不清楚您是否有
订单
模型,或者如何保存表单。我没有订单模型。那么我该如何保存表单呢?那么到底应该在数据库中创建哪些记录等呢?表格不能自动猜到。我不明白。什么意思?
from django.core.mail import send_mail

class OrderForm(forms.Form):

    # …

    def save(self):
        cleaned_data = self.cleaned_data
        send_mail(
            'Your order',
            "The order with name {cleaned_data['name']} and zip {cleaned_data['zip']}",
            None,
            [cleaned_data['email']],
            fail_silently=False,
        )