我是Django的新手,我正在将PHP项目转换为Python等。
我正在尝试做一些非常简单的事情,但我不断收到以下错误:
AttributeError at /news/1/
'QuerySet' object has no attribute 'slug'
以下是我的大部分模型,以帮助解释:
class Article(models.Model):
title = models.CharField(max_length=200)
STATUS_CHOICES = ((1,'Published'), (2,'Hidden'), (3,'Draft'))
status = models.IntegerField(choices=STATUS_CHOICES,default=3)
pub_date = models.DateField('date published')
tags = TaggableManager()
header_width = models.IntegerField(default=1,blank=True,null=True)
header_height = models.IntegerField(default=1,blank=True,null=True)
header = models.ImageField(upload_to='news/',width_field='header_width',height_field='header_height',blank=True,null=True)
header_filter = models.BooleanField('Enable filter',default=1)
excerpt = HTMLField(blank=True)
body = HTMLField(blank=True)
custom_link_text = models.CharField(max_length=20,default="Read More")
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
slug = AutoSlugField(unique=True,max_length=200,populate_from='db_slug',default="",slugify=return_value)
def __str__(self):
return self.title
我目前正在测试以通过slug,所以我的view方法目前看起来像这样:
def detail_redirect(request, pk):
a = Article.objects.all().filter(pk=pk)
return HttpResponse(a.slug)
# return redirect('news:detail',args=(a.slug,pk))
计划是将此方法重定向到我的应用程序中的另一个URL。它通过主键查询数据库并获取Slug,然后将其传递给重定向快捷方式。
它似乎应该起作用,但事实并非如此。真的很令人沮丧。我查询的对象似乎返回确定。由于我的__str__方法,它返回标题。但任何其他属性抛出和错误。是否可以通过私密性或受保护等方式进行展示?
我希望这很简单,我很想念。如果您需要更多代码/细节来帮助解释,请告诉我。
感谢您抽出宝贵时间来查看我的问题。
答案 0 :(得分:4)
filter
始终返回一个查询集,这是一个类似于列表的对象,可能包含许多项。查询集没有模型属性,只有其成员才有。您应该使用get
代替:
a = Article.objects.get(pk=pk)
(请注意,在任一版本的代码中都不需要all()
。)