【问题标题】:Sorting the latest added in Django对 Django 中最新添加的内容进行排序
【发布时间】:2011-05-21 23:07:55
【问题描述】:

我正在尝试显示通过执行此操作添加的 8 个最新扫描:

def index(request):
....
recent_scans = Image.objects.filter(category='Scan').order_by('-date_added')[:8]
...

它“有效”,但实际上并没有获得最近的 8 次扫描。该顺序与def scans 的顺序不同。顺序并没有完全不同,只是有几张扫描错位了。

奇怪的是它在这个视图中起作用:

def scans(request):
    image_list = Image.objects.filter(category='Scan').order_by('-date_added')

取出[:8] 看看它是否会正确排序 NOT 工作,但...所以我不知道它出了什么问题。我唯一的猜测是 Image 模型是通过 ManytoMany 连接的......

我也试过这个:

recent_scans = Image.objects.filter(category='Scan').latest('date_added')

但它带有这个错误:

渲染时捕获 TypeError:“图像”对象不可迭代

这是我的模型,顺便说一句:

class Image(models.Model):
    CATEGORY_CHOICES = (
    ('Cover', 'Cover'),    
    ('Scan', 'Scan'),
    ('Other', 'Other'),
    )
    title = models.CharField(max_length=128)
    image = models.ImageField(upload_to="images/")
    category = models.CharField(max_length=10, choices=CATEGORY_CHOICES)
    contributor = models.ManyToManyField(Contributor, blank=True, null=True)
    date_added = models.DateField(auto_now_add=True)    
    def __unicode__(self):
        return self.title        
    class Meta:
        ordering = ['title']

我尝试将 'get_latest_by = "date_added"` 添加到模型中的 Meta 类中,但这也不起作用。

【问题讨论】:

    标签: django django-views


    【解决方案1】:

    latest() 返回一个实例,而不是 QuerySet,正如 django documentation 明确指出的那样:

    最新(field_name=None)

    使用作为日期字段提供的 field_name 按日期返回表中的最新对象。

    你可以运行类似的东西

    print [i.date_added \
        for i in Image.objects.filter(category='Scan').order_by('-date_added')[:8]]
    

    查看“错误”结果的实际日期...

    【讨论】:

    • 这是我得到的:[datetime.date(2011, 5, 23), datetime.date(2011, 5, 23), datetime.date(2011, 5, 23), datetime.date(2011, 5, 23), datetime.date(2011, 5, 23), datetime.date(2011, 5, 23), datetime.date(2011, 5, 23), datetime.date(2011, 5, 23)] 我真的不知道发生了什么。实际上,我已经唤起了 Python 查询,并且每次按 date_add 排序时它都会显示不同的条目。是因为 date_added 都是一样的吗?这也是一个 DateTime 字段,而不仅仅是一个 Date 字段。
    • 另一个奇怪的事情...我检查了我的 PostgreSQL 表,它们在那里按顺序显示...
    • 实际上您在上面发布的模型显示DateField 而不是DateTimeField...
    • 好吧,我认为这不会影响排序,因为我拥有的另一个模型是Datefield,它排序正确。
    【解决方案2】:

    我不知道为什么它不能按date_added 正确排序,即使在我的Issue 模型中,它确实如此。我唯一的猜测是,如果最新项目是DateField 而不是DateTimeField,则数据库无法正确排序。很奇怪,因为Issue 模型也是如此。

    所以,我只是通过按id 排序解决了这个问题,效果很好!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-19
      • 2016-05-17
      • 2011-01-24
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 2014-02-07
      相关资源
      最近更新 更多