【发布时间】:2018-01-24 10:25:01
【问题描述】:
我遇到了一个错误
MultipleObjectsReturned: get() returned more than one items -- it returned 3!.
我想编辑和更新数据库中的现有记录。下面是我的模型、视图和 html 代码。
模型.py
import datetime
from django.db import models
from django.utils import timezone
class Purchases(models.Model):
bottle = models.CharField(max_length=20)
bottle_purchased = models.CharField(max_length=20)
date_added = models.DateTimeField(auto_now_add=True)
bottle_total= models.CharField(max_length=20)
transportation_cost = models.CharField(max_length=20)
total_cost = models.CharField(max_length=20)
class Meta:
verbose_name_plural = 'Purchases'
def __str__(self):
return self.bottle
用于编辑的视图功能。 视图.py
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponseRedirect, Http404
from django.urls import reverse
from .models import Purchases
from .forms import PurchasesForm
def purchases(request):
purchases = Purchases.objects.order_by('date_added')
context = {'purchases': purchases}
return render(request, 'ht/purchases.html', context)
def edit_purchase(request):
entry = get_object_or_404(Purchases)
purchase = entry.purchase
if request.method != 'POST':
# Initial request; pre-fill form with the current entry
form = PurchasesForm(instance=entry)
else:
# POST data submitted; process data.
form = PurchasesForm(instance=entry, data=request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('geo_gas:purchases'))
context = {'entry': entry, 'purchases': purchases, 'form': form}
return render(request, 'geo_gas/edit_purchase.html', context)
edit_purchase.html
<form action="{% url 'geo_gas:edit_purchase' %}" method='post'>
{% csrf_token %}
{{ form.as_p}}
<button name="Submit">save changes</button>
</form>
附加的是返回的错误。
get() returned more than one items -- it returned 3!
【问题讨论】:
-
问题出在你的
entry = get_object_or_404(Purchases)。您必须指定主键才能仅获取 1 条记录。 -
请为
edit_purchase添加您的网址格式。 -
网址格式'路径('edit_purchase/', views.edit_purchase, name='edit_purchase'),'
-
不要发布代码截图。在 django 错误日志页面中,您可以切换到可复制粘贴的视图。改用它或控制台输出。