class Schedule(models.Model):
user = models.ForeignKey(USER, on_delete=models.SET_NULL, null=True)
area = models.ForeignKey(Site, on_delete=models.SET_NULL, null=True)
created_at = models.DateTimeField(auto_now_add=True, null=True)
updated_at = models.DateTimeField(auto_now=True, null=True)
area = Schedule.objects.values("area").annotate(latest=Max('created_at')).values("area")
latest = Schedule.objects.values("area").annotate(latest=Max('created_at')).values("latest")
Schedule.objects.filter(created_at__in=latest, area__in=area)
我得到了我想要的价值。
然而,当我使用ForeignKey和DateTimeField进行过滤时,我感到不安。没有更好的办法了吗?
另外,除了上面的代码之外,你不能让它变得更干净吗?
发布于 2022-05-11 23:06:59
您可以为您的模型创建一个Manager
并使用selected_related
特性,它将为您创建快速查询,并且它已经准备好了“开箱即用”Django解决方案。请看姜戈文档。
下面是基于您的代码的示例
在Model.py中,类似于
class SheduleManager(model.Manager):
def all_prefetched_data(self):
qs = self.get_queryset()
qs = qs.select_related(
'area_set'
)
return qs
在同一个Model.py中,您需要在Shedule模型中指定经理。
listing = SheduleManager
现在,您可以通过创建日期对db项进行排序,并使用ForiegnKey对所有db进行查询。您还可以显示结果,例如在your_template.html
中用字典b_list
显示结果。
view.py
def GetList(request):
sh_list = Schedul.listing.all().order_by('-created_at')
return render(request, 'your_template.html', {'b_list': sh_list})
https://stackoverflow.com/questions/72209060
复制相似问题