我试图通过这样做来显示最近添加的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类中,但这也不起作用。
答案 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
排序来解决它并且效果很好!