【问题标题】:MultipleObjectsReturned at /review/2 get() returned more than one Project -- it returned 2MultipleObjectsReturned at /review/2 get() 返回了多个项目——它返回了 2
【发布时间】: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_byself.juror
  • @WilliamOnSem,我同意你的看法。是的,我希望同一个用户拥有多个项目。如何查询不同的项目,例如在计算保证金时,我为每个特定项目计算它??

标签: django


【解决方案1】:

代替;

self.margin = self.sales - Project.objects.get_or_create(posted_by=self.juror).total

我把这行代码改成阅读;

self.margin = self.sales - Project.objects.last().total

这样,对于每个获取减去(边距)值的新条目,它都会调用最后发布的数据。此解决方案有效。但是我已经证明,如果我从以前的项目条目中减去,它会从最后的条目值中扣除。但是,如果这些先前的项目已经记录了它们的利润值,这是一个很好的中途解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 2016-08-13
    • 1970-01-01
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 2022-01-11
    相关资源
    最近更新 更多