错误:精确查找的 QuerySet 值必须使用切片限制为一个结果

阿尼鲁德

我是 Django 的新手,正在创建一个问答应用程序

我收到以下错误: The QuerySet value for an exact lookup must be limited to one result using slicing.

模型.py:

from django.db import models
from django.contrib.auth.models import User
from django.utils.text import slugify
from django.contrib.auth.models import User


class Log(models.Model):
    title = models.CharField(blank=False, max_length=500)
    content = models.TextField(blank=False)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    slug = models.SlugField(max_length=50, null=False)
    created_by = models.CharField(null=True, max_length=500)
    avatar = models.ImageField(
        upload_to='images', blank=True)

    def save(self, *args, **kwargs):
        self.slug = self.slug or slugify(self.title)
        super().save(*args, **kwargs)

    class Meta:
        verbose_name = ("Log")
        verbose_name_plural = ("Logs")

    def __str__(self):
        return f"{self.title}"


class Solutions(models.Model):
    log = models.ForeignKey(
        Log, on_delete=models.CASCADE, blank=True, null=True)
    solution = models.TextField(null=True)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    slug = models.SlugField(max_length=50, null=False, blank=True)

    def save(self, *args, **kwargs):
        self.slug = self.slug or slugify(self.title)
        super().save(*args, **kwargs)

    class Meta:
        verbose_name = ("Solution")
        verbose_name_plural = ("Solutions")

    def __str__(self):
        return f" {self.log.title} {self.solution} "


class Like(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    log = models.ForeignKey(Log, on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"like by {self.user.username} for {self.log.title}"


class Comments(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    log = models.ForeignKey(
        Solutions, on_delete=models.CASCADE, null=True, blank=True)
    comment = models.TextField(null=True, blank=True)
    created_by = models.CharField(null=True, max_length=500)

    class Meta:
        verbose_name = ("Comment")

        verbose_name_plural = ("Comments")

    def __str__(self):
        return f"{self.comment}"

我得到的错误是获取特定解决方案的评论。

views.py 中的函数:

def solution(request, id, question):
    solution = Solutions.objects.filter(id=id)

    if request.method == 'POST':
        form = CommentForm(request.POST)
        if form.is_valid():
            solution = Solutions.objects.filter(id=id)
            com = form.cleaned_data['comment']
            c = Comments()
            c.comment = com
            c.created_by = request.user.username
            c.log = solution
            print(c)
            c.save()
            message = messages.add_message(request, 25,
                                       'Comment added successfully')

            return HttpResponseRedirect(f'/solution/{id}/{solution.slug}')
        else:
            message = messages.add_message(request, 30,
                                       'Error')
    else:
        form = CommentForm()
        message = ''

    try:
        solution = Solutions.objects.filter(id=id)
        print(solution)
        comment = Comments.objects.filter(log=solution)

    except Solutions.DoesNotExist:
        comment = ''
        solution = ''


    context = {
        'comments': comment,
        'forms': form,
        'message': message,
        'solution': solution,
    }
    return render(request, 'solution.html', context=context)

错误在行中 solution = Solutions.objects.filter(id=id)

当我打印解决方案时,它给了我一个空的查询集.. 谁能告诉我正确的方法吗?

我有一个问题(按数据库记录)和该问题的解决方案.. 解决方案有评论

谢谢

亚历山大·尤德金

Solution.objects.filter(id=id)返回一个 QuerySet,如果具有这样 id 的解决方案不存在,它可能是空的。在这种情况下,您无法获得所需的异常。使用Solution.objects.get(id=id),然后您将获得单个实例或Solutions.DoesNotExist异常。

顺便说一句,idpython 中的变量命名不好,因为id它是标准的 python 函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

精确查找的QuerySet值必须使用切片限制为一个结果

Django:精确查找的 QuerySet 值必须使用切片限制为一个结果

需要帮助解决错误“精确查找的 QuerySet 值必须限制为使用切片的一个结果”

必须使用切片将精确查找的QuerySet值限制为一个结果。过滤错误

Django错误:必须使用切片将精确查找的QuerySet值限制为一个结果?

django错误,“用于精确查找的QuerySet值必须限制为使用切片的一个结果”

ValueError对于精确查找的QuerySet值必须限制为使用Django视图切片的一个结果

Django objects.get():用于精确查找的QuerySet值必须使用切片限制为一个结果

Django 信号:精确查找的 QuerySet 值必须使用切片限制为一个结果

如何获得解决此错误的信息“精确查找的QuerySet值必须限制为使用切片的一个结果。”

如何解决“用于精确查找的QuerySet值必须限制为使用切片的一个结果。” Django中的错误

如何让用户关联到另一个模型 DRF。ValueError:精确查找的 QuerySet 值必须使用切片限制为一个结果

我如何解决精确查找的 QuerySet 值必须限制为使用切片的一个结果。姜戈

精确查询的QuerySet值必须使用slicing-Django限制为一个结果

在不使用切片的情况下,限制了Django QuerySet的结果数量

使用iloc时,“试图从DataFrame的切片副本上设置一个值”错误

django-在结果受限制的queryset上切片/过滤后过滤

Django queryset结果对于测试是错误的

Django QuerySet切片返回意外结果

将查找请求限制为一个结果

类型错误:列表索引必须是整数或切片,而不是元组我得到一个类型错误:

切片后订购Django QuerySet

如何在Django表单的queryset上使用切片?

在Django中,如何使用动态字段查找过滤QuerySet?

UpdateView缺少QuerySet错误

为什么 Pandas 会抛出错误:“试图在 DataFrame 中切片的副本上设置一个值。”

Django Queryset结果的顺序

当我尝试重塑形状时,它给我一个错误,提示“ TypeError:列表索引必须是整数或切片,而不是元组”

根据精确查找返回所有值