Django视图/模型属性错误

时间:2015-07-03 10:55:51

标签: python django

我是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__方法,它返回标题。但任何其他属性抛出和错误。是否可以通过私密性或受保护等方式进行展示?

我希望这很简单,我很想念。如果您需要更多代码/细节来帮助解释,请告诉我。

感谢您抽出宝贵时间来查看我的问题。

1 个答案:

答案 0 :(得分:4)

filter始终返回一个查询集,这是一个类似于列表的对象,可能包含许多项。查询集没有模型属性,只有其成员才有。您应该使用get代替:

a = Article.objects.get(pk=pk)

(请注意,在任一版本的代码中都不需要all()。)