排序最新添加的Django

时间:2011-05-21 23:07:56

标签: django django-views

我试图通过这样做来显示最近添加的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:'Image'对象不可迭代

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

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类中,但这也不起作用。

2 个答案:

答案 0 :(得分:0)

latest()会返回一个实例,而不是QuerySet,因为django documentation明确指出:

  

<强>最新(FIELD_NAME =无)

     

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

您可以运行类似

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

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

答案 1 :(得分:0)

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

所以,我只是通过id排序来解决它并且效果很好!