如何在Django中基于另一个模型对查询进行排序
如果我有:如何在Django中基于另一个模型对查询进行排序,django,Django,如果我有: class Assets(models.Model): assetMake = models.CharField(max_length=50,blank=True,) assetModel = models.CharField(max_length=50,blank=True,) class Maintenance(models.Model): assetID = models.ForeignKey(Assets, on_delete=models.CASC
class Assets(models.Model):
assetMake = models.CharField(max_length=50,blank=True,)
assetModel = models.CharField(max_length=50,blank=True,)
class Maintenance(models.Model):
assetID = models.ForeignKey(Assets, on_delete=models.CASCADE)
dateRequested = models.DateTimeField(null=True, blank=True)
dateCompleted = models.DateTimeField(null=True, blank=True)
complete = models.BooleanField(default = False)
我想列出视图中的所有资产,并按上次维护它们的时间(dateCompleted)对它们进行排序
我一直在努力使下面的工作,但我觉得有更容易的方法来完成这一点,任何帮助都是感激的
class MaintenanceAgeList(LoginRequiredMixin,TemplateView):
template_name = 'maintenance_list.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
maintenanceList = []
assets = Assets.objects.filter(retire = False)
today = timezone.now().date()
for asset in assets:
maintenance = Maintenance.objects.filter(assetID_id = asset.id, complete =True,).order_by('-dateCompleted')
if maintenance.count() > 0:
asset['maintDate'] = (maintenance[0].dateCompleted).date()
maintenanceList.append(asset)
asset['days'] = (today - lastMaintenance[0].dateCompleted.date()).days
else:
asset['maintDate'] = today - timedelta(days=365)
asset['days'] = 365
maintenanceList.append(asset)
maintenanceList = maintenanceList.sort(key=lambda r: r.maintDate)
context['items'] = maintenanceList
return context
试一试
注意:或者,您可以通过args设置空值的位置。试试看
注意:或者,您可以通过args设置空值的位置。感谢@Arakkal Abu的回答。这可能是一个单独的问题,但如何计算从现在到维护完成的天数呢?您可以使用
annotate()
。根据SO指南,最好问一个新问题。感谢您的回答@Arakkal Abu。这可能是一个单独的问题,但如何计算从现在到维护完成的天数呢?您可以使用annotate()
。根据SO指南,最好问一个新问题。
from django.db.models import Max
Assets.objects.annotate(
last_modified=Max('maintenance__dateCompleted')
).order_by('-last_modified')