繁体   English   中英

Django:为每个(FK)打印模型的最后一个对象

[英]Django: print the last object of model for every (FK)

我有两个型号:

class Mantipo(models.Model):   
    tipo = models.CharField(max_length=255)
    ...

class BillInitial(models.Model):
    tipo = models.ForeignKey(Mantipo, null=True, blank=True)
    nombre = models.CharField(max_length=255)
    ...

假设我有“BillInitial”模型的以下对象:

| id | tipo (FK) | nombre |

| 1 | uno | X | 

| 2 | dos | y | 

| 3 | cinco | x | 

| 4 | cinco | x |

| 5 | dos | z | 

| 6 | uno | X |

我想输出nombre(X)的最后一个对象,如:

| id | tipo (FK) | nombre |

| 4 | cinco | x | 

| 6 | uno | X |

您可能正在寻找以下内容:

BillInitial.objects.filter(nombre__iexact='x').order_by('-id')[:2]

可能是nombre__icontains也很有用。

later_items_per_nombre = BillInitial.objects.filter(
    nombre=OuterRef('nombre'), 
    tipo=OuterRef('tipo'),
    pk__gt=OuterRef('pk')
)

BillInitial.objects.filter(nombre='x',).\
    annotate(is_not_last=Exists(later_items_per_nombre), ).\
    filter(is_not_last=False, )

我想,如果您使用PostgreSQL,您可以在tipo FK字段上使用distinct()构建查询。 如果没有,也许尝试使用last()如:

small_x = BillInitial.objects.filter(
        nombre='x'
    ).last()
big_x = BillInitial.objects.filter(
        nombre='X'
    ).last()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM