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

Django模型方法在列表模板中调用无正确返回值问题排查

问题原因及解决方案

核心问题

你的FoodListView中使用了.values()方法,这会让查询返回字典对象而非Food模型的实例对象。字典没有get_absolute_url这类模型自定义方法,所以在列表模板中调用时无法生成正确的URL。

而详情页的FoodDetailView返回的是完整的模型实例,所以模型方法能正常调用。

解决方案

移除queryset中的.values()方法,修改后的views.py代码如下:

class FoodListView(LoginRequiredMixin, generic.ListView):
    model = Food
    context_object_name = 'food_list'
    queryset = Food.objects.filter(name__contains='kale').order_by('calcium')[:50]

补充说明

  • .values()方法的作用是返回包含指定字段的字典序列,而非模型实例,适合只需要获取数据而不需要模型方法/属性的场景。
  • 如果需要限制返回的字段,建议使用.only()或.defer()方法,它们返回的仍然是模型实例,同时能减少数据库查询的字段数量,比如:
    queryset = Food.objects.filter(name__contains='kale').order_by('calcium').only('name', 'fdc_id')[:50]
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:05:13