我有两个模型:
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()