我是 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
异常。
顺便说一句,id
python 中的变量命名不好,因为id
它是标准的 python 函数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句