html - 两种不同模型中 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)
我尝试在表单中覆盖保存功能,但没有结果。
解决方案
get() 不能用于返回超过 1 个对象时。尝试使用过滤器()。
如果对您有帮助,请检查 first() 或 last()。
推荐阅读
- java - Java TreeSet:我想按数字进行重复检查并按字符串排序
- html - Ant Design System中如何稍微改变元素的位置?
- react-native - 创建新的 React Native 项目时出错
- python - 使用 PySpark 从 PostgreSQL 读取二进制数据的问题
- c# - 如何防止 UserControl 破坏 ElementName 绑定
- android - 使用 MediaMuxer 将静态图像添加到 MP4 容器
- android - 当应用程序在 android 中被删除时,mediastore 会发生什么?
- ruby-on-rails - AnyCable request.params 在生产中为空
- tensorflow - 简单地导入 tensorflow 会杀死我的 Jupiter notebook 内核
- python - 如何创建大小为 10 的矩阵(数组)并将所有值设置为 0。使用冲突(i,j)=0