Django:为每个(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 |
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, )

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

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

可能也是nombre__icontains也很有用。

我认为,如果您使用PostgreSQL,则可以在Tipo FK字段上使用distinct()构建查询。如果没有,也许尝试使用last()喜欢:

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

最新更新