无法解析关键字u';slug';Django中的字段错误?

无法解析关键字u';slug';Django中的字段错误?,django,django-models,django-views,django-urls,Django,Django Models,Django Views,Django Urls,我得到以下错误: FieldError at /blog/1/first-post/ Cannot resolve keyword u'slug' into field. Choices are: article, date, id, likes Request Method: GET Request URL: http://127.0.0.1:8000/blog/1/first-post/ Django Version: 1.6.2 Exception Type:

我得到以下错误:

FieldError at /blog/1/first-post/

Cannot resolve keyword u'slug' into field. Choices are: article, date, id, likes

Request Method:     GET
Request URL:    http://127.0.0.1:8000/blog/1/first-post/
Django Version:     1.6.2
Exception Type:     FieldError
Exception Value:    

Cannot resolve keyword u'slug' into field. Choices are: article, date, id, likes
我的模型:

class Article(models.Model):
    title = models.CharField(max_length=20)
    body = models.TextField()
    image = models.ImageField(upload_to="/", blank=True, null=True)
    slug = models.SlugField()

    def save(self, *args, **kwargs):
        if not self.id:
            self.slug = slugify(self.title)
        super(Article, self).save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse('article_detail', kwargs={'slug':self.slug, 'id':self.id})

    def __unicode__(self):
        return self.title

class Detail(models.Model):
    article = models.ForeignKey(Article)
    date = models.DateField()
    likes = models.IntegerField()

    def __unicode__(self):
        return "%s %s" % (self.article.title, self.likes)

    def get_absolute_url(self):
        return reverse('detail_article', kwargs={'id':self.id})
视图:

url.py(这是由博客应用程序提供的):


解决方案:您需要将url中的slug参数重命名为其他名称,或者在视图中设置slug\u url\u kwarg一些其他值-而不是“slug”

说明: 当您添加到url时,django尝试通过slug获取对象,而您的模型细节并没有slug字段

链接到django代码:

更新

在SingleObjectMixin中:

slug = self.kwargs.get(self.slug_url_kwarg, None)
...
elif slug is not None:
    slug_field = self.get_slug_field()
    queryset = queryset.filter(**{slug_field: slug})
所以django从url获取slug,尝试从细节模型获取slug字段,但失败了

您的视图需要重写slug\u url\u kwarg属性:

class ArticleDetail(DetailView):
    model = Detail
    template_name = "article_detail.html"
    context_object_name = "details"
    slug_url_kwarg = "not_slug" # this attribute

 def get_queryset(self):
    print self.kwargs['slug']
    a = Article.objects.get(slug=self.kwargs['slug'])
    # print Details.object.get()
    # print Detail.objects.filter(article__slug=self.kwargs['slug']) fails with same error
    return Detail.objects.filter(article=a)
但我认为更好的方法是更改url中的属性:

url(r'^(?P<id>\d+)/(?P<article_slug>[-\w\d]+)/$', ArticleDetail.as_view(), name='article_detail'),
url(r'^(?P\d+)/(?P[-\w\d]+)/$”,articledeail.as_view(),name='article_detail'),

从视图kwargs获取文章slug

覆盖
get\u对象(self,queryset=None)
方法而不是DetailView
get\u queryset(self)
是一个更简单的解决方案

class ArticleDetail(DetailView):
    model = Detail
    template_name = "article_detail.html"
    context_object_name = "details"

    def get_object(self, queryset=None):
        slug = self.kwargs['slug']
        a_obj = Article.objects.get(slug=slug)
        try:
           d_obj = Detail.objects.get(article=a_obj)
        except Detail.DoesNotExist:
            d_obj = None
        except Detail.MultipleObjectsReturned:
            #select the apt object
        return d_obj

您的数据库中是否存在“slug”字段?@zymud:是的,它适用于
文章
模型。我可以看到它在管理和查询在Shell请显示您的template@zymud:上面添加的模板您能否详细说明“在您的视图中设置slug\u url\u kwarg一些其他值-而不是slug”的含义?如果可能,请给出代码示例
class ArticleDetail(DetailView):
    model = Detail
    template_name = "article_detail.html"
    context_object_name = "details"
    slug_url_kwarg = "not_slug" # this attribute

 def get_queryset(self):
    print self.kwargs['slug']
    a = Article.objects.get(slug=self.kwargs['slug'])
    # print Details.object.get()
    # print Detail.objects.filter(article__slug=self.kwargs['slug']) fails with same error
    return Detail.objects.filter(article=a)
url(r'^(?P<id>\d+)/(?P<article_slug>[-\w\d]+)/$', ArticleDetail.as_view(), name='article_detail'),
class ArticleDetail(DetailView):
    model = Detail
    template_name = "article_detail.html"
    context_object_name = "details"

    def get_object(self, queryset=None):
        slug = self.kwargs['slug']
        a_obj = Article.objects.get(slug=slug)
        try:
           d_obj = Detail.objects.get(article=a_obj)
        except Detail.DoesNotExist:
            d_obj = None
        except Detail.MultipleObjectsReturned:
            #select the apt object
        return d_obj