如何在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
相关产品推荐
相关产品推荐

