【发布时间】:2020-12-05 11:34:09
【问题描述】:
我有一个应用程序,用户可以在其中注册和创建个人资料。在他们创建个人资料后,他们可以存储他们的数据。该数据中最重要的部分是用户填写数量和价格等,通过一个简单的函数计算总计。我也有另一个具有函数的模型,它通过添加他们的总销售额并从先前模型的总数中减去它并将其存储在第二个表中的字段名称边距中来计算用户当前的利润。当用户创建他们的第一个实例并调用下一个边距函数时,它运行良好。如果同一用户创建另一个实例,这也可以,但我收到此错误“MultipleObjectsReturned at /review/2, get() 返回了多个项目——它返回了 2!”在计算保证金时。我希望登录用户保存多个对象或数据,如果他们也有的话。几天来我一直在寻找一个相关的解决方案,但没有一个对我有帮助。请告诉我一个方法。
这是使应用程序通过此异常的模型:
class Reviews(models.Model):
juror = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
project = models.ForeignKey(Project, Profile, related_name='reviews', null=True)
margin = models.IntegerField(default=0,null=True)
sales = models.IntegerField(default=0, null=True)
comment = models.CharField(max_length=200, null=True)
date_created = date_created = models.DateTimeField(auto_now_add=True, null=True)
def save(self, *args, **kwargs):
self.margin = self.sales - Project.objects.get_or_create(posted_by=self.juror).total
if self.sales > self.margin:
self.margin = self.margin
else:
-self.margin
return super().save( *args, **kwargs)
@classmethod
def get_reviews(cls):
reviews = Reviews.objects.all()
return reviews
这就是我的视图:
@login_required(login_url='/accounts/login/')
def add_review(request,pk):
project = get_object_or_404(Project, pk=pk)
current_user = request.user
if request.method == 'POST':
form = ReviewForm(request.POST)
if form.is_valid():
sales = form.cleaned_data['sales']
margin = form.cleaned_data['margin']
review = form.save(commit=False)
review.project = project
review.juror = current_user
review.sales = sales
review.margin = margin
review.save()
return redirect('home')
else:
form = ReviewForm()
return render(request,'review.html',{"user":current_user,"form":form})
【问题讨论】:
-
这意味着
Project.objects.get_or_create(posted_by=self.juror)返回了两个项,所以Project有两条记录,其中posted_by是self.juror。 -
@WilliamOnSem,我同意你的看法。是的,我希望同一个用户拥有多个项目。如何查询不同的项目,例如在计算保证金时,我为每个特定项目计算它??
标签: django