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

如何在Django中展示模型最新发布记录?现有代码返回全部记录如何解决

问题原因&解决方案

1. views.py 代码问题

  • 你重复定义了get_context_data方法:Python类中后定义的同名方法会覆盖之前的逻辑,原本需要传入模板的numbers数据实际不会被添加到上下文里
  • 你仅对Avaibility数据做了倒序排序,没有限制返回条数,所以会返回该表的所有数据,需要添加切片限制返回数量

2. models.py 代码问题

  • 你重复定义了__str__方法:仅最后一个返回presence_text的方法会生效,若需要返回多个字段的内容,可自行拼接字段值

修正后代码

views.py

class IndexView(generic.ListView):
    template_name = 'Homepage/index.html'
    model = Goods
    context_object_name = 'goods'

    def description(self):
        return self.description_text

    def price(self):
        return self.price_text

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # 保留原有numbers查询逻辑
        numbers = Number.objects.all()
        context['numbers'] = numbers
        # 倒序排序后取最新1条,需要展示N条就把1改成对应数值
        avaibilitys = Avaibility.objects.order_by('-pub_date')[:1]
        context['avaibilitys'] = avaibilitys
        return context

models.py

class Avaibility(models.Model):
    name_text = models.CharField(max_length=200)
    apply_text = models.CharField(max_length=200)
    presence_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published', null=True)

    def __str__(self):
        # 按需拼接需要展示的字段,示例为拼接三个字段内容
        return f"{self.name_text} | {self.apply_text} | {self.presence_text}"

补充说明

如果只需要返回单条最新数据,也可以使用first()方法:Avaibility.objects.order_by('-pub_date').first(),该方法返回的是单个对象而非查询集,模板中使用时不需要循环遍历,可直接调用属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:57:02