You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django使用get_queryset报错:无法将关键字'name'解析为字段

解决Django中从URL捕获组筛选关联Post的FieldError问题

嘿,作为Django新手遇到这个问题很正常,咱们来一步步搞定它!

首先,先明确你的需求:从URL的捕获组里拿到Story模型的主键,然后过滤出Post数据库中关联这个Story的所有帖子(因为Story和Post是一对多关系)。你遇到的FieldError: Cannot resolve keyword 'name' into field,本质是你在筛选的时候用了一个不存在的字段名,或者字段关联的写法不对。

第一步:先确认你的模型结构

首先要确保Post模型里有正确的外键关联到Story,比如应该是这样的:

from django.db import models

class Story(models.Model):
    # 你的Story字段,比如标题、内容等
    title = models.CharField(max_length=200)
    # ...其他字段

class Post(models.Model):
    # 这里的`story`是外键字段名,你可以根据自己的命名调整,但后面筛选要对应
    story = models.ForeignKey(Story, on_delete=models.CASCADE)
    content = models.TextField()
    # ...其他字段

第二步:检查你的URL配置

确保URL里正确捕获了Story的主键,比如:

# urls.py
from django.urls import path
from .views import PostByStoryListView

urlpatterns = [
    path('story/<int:story_pk>/', PostByStoryListView.as_view(), name='story-posts'),
]

这里的<int:story_pk>就是我们要从URL里获取的Story主键值。

第三步:修正你的类视图代码

你之前参考官方文档的思路是对的,但错误出在get_queryset方法里的筛选条件。正确的写法应该是利用Post模型里的外键字段,关联到Story的主键:

# views.py
from django.views.generic import ListView
from .models import Post, Story

class PostByStoryListView(ListView):
    model = Post
    template_name = 'your_post_template.html'  # 替换成你的模板路径
    context_object_name = 'posts'  # 模板里用来遍历帖子的变量名

    def get_queryset(self):
        # 从URL的捕获组中获取story_pk
        story_pk = self.kwargs.get('story_pk')
        # 关键在这里:用Post的外键字段(比如`story`)关联Story的主键
        # 两种写法都可以:
        return Post.objects.filter(story__pk=story_pk)
        # 或者直接用外键的_id后缀,更高效:
        # return Post.objects.filter(story_id=story_pk)

    # 可选:如果你想把对应的Story对象传到模板里展示,可以重写这个方法
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        story_pk = self.kwargs.get('story_pk')
        context['current_story'] = Story.objects.get(pk=story_pk)
        return context

为什么会出现那个错误?

你之前的代码里应该是写了类似filter(name=...)的语句,但Post模型里根本没有name这个字段,或者你想引用Story的字段但没写对关联方式(比如如果是按Story的name筛选,应该写成story__name=xxx,但你现在要的是主键,所以应该用story__pk或者story_id)。

最后验证一下

在你的模板里,就可以直接用{{ current_story.title }}展示当前Story的标题,用{% for post in posts %}遍历所有关联的帖子啦!

内容的提问来源于stack exchange,提问作者Emma Jane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:54:22