我有两个模型:
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 |
答案 0 :(得分:0)
您可能正在寻找以下内容:
BillInitial.objects.filter(nombre__iexact='x').order_by('-id')[:2]
也许nombre__icontains
也会有用。
答案 1 :(得分:0)
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, )
答案 2 :(得分:0)
我认为,如果您使用PostgreSQL,则可以在tipo FK字段上使用distinct()
建立查询。如果不是,请尝试使用last()
,例如:
small_x = BillInitial.objects.filter(
nombre='x'
).last()
big_x = BillInitial.objects.filter(
nombre='X'
).last()