[英]Django ORM. How to exclude old data?
I want to exclude unnessery old records from my queryset. 我想从我的查询集中排除不必要的旧记录。
I tried use annotate(Max('pc_users__created')), but this is not what i want. 我尝试使用annotate(Max('pc_users__created')),但这不是我想要的。 I think i should use 'group by' or something like that, but I can not understand how. 我认为我应该使用“分组依据”或类似的方式,但我不知道如何使用。
Here's my models.py 这是我的models.py
class Room(models.Model):
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
room_number = models.SmallIntegerField()
def __str__(self):
return f'Room №{self.room_number}'
class UserProfiles(models.Model):
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
name = models.CharField(max_length=100)
def __str__(self):
return f'{self.name}'
class Pc(models.Model):
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
title = models.CharField(max_length=100)
ram = models.SmallIntegerField()
cpu = models.CharField(max_length=20)
gpu = models.CharField(max_length=20)
def __str__(self):
return f'{self.title}'
class PcUsers(models.Model):
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
pc = models.ForeignKey(Pc, on_delete=models.PROTECT, related_name='pc_users')
user = models.ForeignKey(UserProfiles, on_delete=models.PROTECT)
def __str__(self):
return f'{self.pc}: {self.user}'
class PcRooms(models.Model):
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
pc = models.ForeignKey(Pc, on_delete=models.PROTECT, related_name='pc_rooms')
room = models.ForeignKey(Room, on_delete=models.PROTECT)
def __str__(self):
return f'{self.pc}: {self.room}'
and views.py : from myapp.models import Pc 和views.py :从myapp.models导入PC
def report(request):
data = Pc.objects.values(
'id',
'title',
'pc_users__user__name',
'pc_rooms__room__room_number'
)
return render(request, 'report.html', {'data': data})
Also here is my data from admin site 这也是我来自管理站点的数据
I want exclude all repetitive records and keep all newest records. 我要排除所有重复记录,并保留所有最新记录。 Like this 像这样
+-------+------------+---------+---------+
| ID Pc | Pc Title | Pc User | Pc Room |
+-------+------------+---------+---------+
| 1 | Laptop | User1 | 201 |--> Keep this
| 1 | Laptop | User1 | 999 |
| 1 | Laptop | Admin | 201 |
| 1 | Laptop | Admin | 999 |
| 2 | PC1 | User1 | 201 |--> Keep this
| 2 | PC1 | User1 | 202 |
| 2 | PC1 | User2 | 201 |
| 2 | PC1 | User2 | 202 |
| 3 | PC2 | User2 | 202 |--> Keep this
| 3 | PC2 | User2 | 203 |
| 3 | PC2 | User3 | 202 |
| 3 | PC2 | User3 | 203 |
| 4 | PC3 | User3 | 203 |--> Keep this
| 4 | PC3 | User3 | 201 |
| 4 | PC3 | User1 | 203 |
| 4 | PC3 | User1 | 201 |
| 5 | Server | Admin | 999 |--> Keep this
| 6 | new laptop | None | 301 |--> Keep this
+-------+------------+---------+---------+
使用distinct()
排除重复和order_by
使用created
领域,以保持最近的记录
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.