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

Django模板无法获取Word模型pk的问题求助

解决Django词汇列表视图无法获取Word对象pk的问题

问题根源

你用values(language)查询时只指定了语言字段,返回的是仅包含该字段的字典集合,自然没有pk/id字段,导致模板里拿不到主键生成详情链接。

两种可行解决方案

方案1:在values()中显式包含pk字段

直接修改查询语句,把pk(或id)加入values()的参数列表,这样返回的字典里就会同时包含主键和目标语言字段:

class WordListByLanguageView(ListView):
    model = Word
    def get_queryset(self):
        language = self.kwargs.get('language')
        # 显式指定pk和目标语言字段
        return Word.objects.values('pk', language)

模板里就能正常使用{{ word.pk }}生成详情链接,词汇内容用{{ word.[language] }}(比如language是'english'就用{{ word.english }})。

方案2:返回完整Word对象(更推荐)

放弃用values(),直接返回完整的Word实例,这样不仅能拿到pk,还能利用模型的其他属性或方法,扩展性更强:

class WordListByLanguageView(ListView):
    model = Word
    def get_queryset(self):
        # 可根据需求添加过滤条件,比如只返回当前用户的词汇
        return Word.objects.all()
    
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # 把当前选中的语言传到模板
        context['selected_language'] = self.kwargs.get('language')
        return context

然后在Word模型里加一个动态获取对应语言词汇的方法:

class Word(models.Model):
    # 假设你的字段是english、spanish这类多语言字段
    english = models.CharField(max_length=100)
    spanish = models.CharField(max_length=100)
    # 其他字段...

    def get_language_word(self, language):
        # 安全获取对应语言的词汇,不存在则返回空字符串
        return getattr(self, language, '')

模板里这样使用:

{% for word in object_list %}
    <a href="{{ selected_language }}/{{ word.pk }}">
        {{ word.get_language_word(selected_language) }}
    </a>
{% endfor %}

这种方式更符合Django的ORM使用习惯,后续扩展功能也更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:02:07