首页 > 解决方案 > 两种不同模型中 form.save() 的混淆

问题描述

由于模型,我在显示页面时遇到问题。老实说,我不知道问题出在哪里,我在这里看到的每个解决方案都超出了我的范围,因为我才刚刚开始学习 Django。这是摘要:我从两个模型(相互关联)创建了两个表单,并将这些表单中的数据呈现在一个页面中。数据在仪表板面板上显示良好,提交确实将其保存到数据库中。我尝试在表单中覆盖保存功能,但没有结果。但是,每当我尝试加载包含相同数据的页面(为客户显示主页等页面)时,我都会遇到:

 Traceback (most recent call last):
  File "C:\Users\shahi\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\shahi\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\shahi\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "D:\Softwarica\3rd semester\Modern Web\Assignment\Project - Farmer's Market\farmersmarket\home\views.py", line 9, in index
    order, created = Order.objects.get_or_create(customer=customer, complete=False)
  File "C:\Users\shahi\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Users\shahi\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\models\query.py", line 559, in get_or_create
    return self.get(**kwargs), False
  File "C:\Users\shahi\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\models\query.py", line 419, in get
    raise self.model.MultipleObjectsReturned(
shop.models.Order.MultipleObjectsReturned: get() returned more than one Order -- it returned 2!

forms.py 中的代码:

from django.forms import ModelForm
from shop.models import *

class OrderForm(ModelForm):
    class Meta:
        model = Order
        fields = ('customer',)

class OrderItemForm(ModelForm):
    class Meta:
        model = OrderItem
        fields = ('item', 'status',)

视图.py

def createOrder(request):
form_order = OrderForm()
form_orderitem = OrderItemForm()

if request.method == 'POST':
    # print('Printing POST', request.POST)
    form_order = OrderForm(request.POST)
    form_orderitem = OrderItemForm(request.POST)

    if form_order.is_valid() and form_orderitem.is_valid():
        form_order.save()
        form_orderitem.save()

        return redirect('/dashboard')

context = {'form_order': form_order, 'form_orderitem': form_orderitem}

return render(request, 'dashboard/order_form.html', context)

我尝试在表单中覆盖保存功能,但没有结果。

标签: htmldjangogetsavemodelform

解决方案


get() 不能用于返回超过 1 个对象时。尝试使用过滤器()。

如果对您有帮助,请检查 first() 或 last()。


推荐阅读