表:
var initializedList = new double[10].ToList()
我需要选择可用空间最大的服务器。
我的尝试,
| Server ID | Total HDD Space | Used HDD Space |
| alpha | 1000 | 10 |
| bravo | 1500 | 1000 |
发出此错误:
server = Server.objects.filter(free_space=(F('total_space')-F('used_space'))).order_by('-free_space')[:1]
我也尝试过这种方式:
Cannot resolve keyword 'free_space' into field. Choices are: image, name, total_space, used_space
谢谢。
答案 0 :(得分:1)
你可以在Django 1.8中执行此操作,它具有新的查询功能(release notes)。
servers = Server.objects.annotate(free_space=(F('total_space')-F('used_space'))).order_by('free_space')
在早期版本的Django上,您可以使用extra()
。
servers = Server.objects.extra(select={'free_space': 'total_space-used_space'}, order_by=['-free_space'])
答案 1 :(得分:0)
Alasdair的回复是正确的。或者,您可能只想在新列中缓存差异:
class Server(models.Model):
total_hdd_space = models.PositiveIntegerField(...)
used_hdd_space = models.PositiveIntegerField(...)
free_hdd_space = models.PositiveIntegerField(...)
def save(*args, **kwargs):
self.free_hdd_space = self.total_hdd_space - self.used_hdd_space
super(Server, self).save(*args, **kwargs)
这会使查询更快但占用更多空间。