Django筛选最新文件



我有一个类似的模型

class Type(CommonBase):
"""
Allowed document types
"""
DOCUMENT_CLASS_CHOICES = (
('C', 'Credit Card'),
('D', 'Debit Card'),
('SD', 'Supporting Documents'),
)
MODEL_TYPE_CHOICE = (
('person', 'Person'),
('bank', 'Bank'),
('all', 'All')
)
document_title = models.CharField(max_length=100)
document_class = models.CharField(choices=DOCUMENT_CLASS_CHOICES, max_length=3, default='C')
model_type = models.CharField(choices=MODEL_TYPE_CHOICE, max_length=50, default='person')
class Document(CommonBase):

doc_type = models.ForeignKey(Type, on_delete=models.PROTECT)
uploaded_datetime = models.DateTimeField(null=True, blank=True)
user = models.ForeignKey(Person, on_delete=models.CASCADE)
comment = models.CharField(max_length=200, null=True, blank=True)

我可以针对同一用户上传多张信用卡或多张借记卡的详细信息。

因此,如果用户已经上传了2个信用卡文档和3个借记卡文档。我需要上传针对该用户的所有文件,但应该只有一个信用卡和借记卡文件,这是最新的

docs = Documrnt.objects.filter(user=user)

这给了我针对该特定用户上传的所有文档(2个信用卡文档和3个借记卡文档(。但我只需要结果中最新上传的借记卡和信用卡详细信息

查询应该如何?

您想要的是order_by的降序行为。

最旧的项目优先

Document.objects.order_by('uploaded_datetime')

最新项目优先(你想要的(

Document.objects.order_by('-uploaded_datetime')

这可以通过使用关系查找,根据所需字段uploaded_datetime排序,然后从每个查询中检索最后的值来完成。如以下示例所示:

qs = Document.objects.filter(user=user)
latest_uploaded_credit_card = qs.filter(doc_type__document_class='C').order_by('uploaded_datetime').last()
latest_uploaded_debit_card = qs.filter(doc_type__document_class='D').order_by('uploaded_datetime').last()
qs = Document.objects.filter(user=user)
latest_credit_card = qs.filter(doc_type__document_class='C').order_by('-id')[0]
latest_debit_card = qs.filter(doc_type__document_class='D').order_by('-id')[0]

最新更新