【发布时间】:2017-04-06 10:35:26
【问题描述】:
我是 Django 新手,我正在尝试创建一个简单的应用程序来跟踪 SQlite 数据库中的不同服务器配置。我创建了 2 个数据库模型:
from django.db import models
class Server(models.Model):
name = models.CharField(max_length=250)
class Config(models.Model):
server = models.ForeignKey(Server, on_delete=models.CASCADE)
configuration = models.CharField(max_length=250)
config_version = models.IntegerField()
这是 2 个模型的示例数据:
Server:
| id | name |
| ------ | ------ |
| 1 | Server1 |
| 2 | Server2 |
| 3 | Server3 |
Config:
| id | configuration | config_version | server |
| ------ | ------------- | -------------- | ------ |
| 1 | srv1_cfg1 | 1 | 1 |
| 2 | srv2_cfg1 | 1 | 2 |
| 3 | srv2_cfg2 | 2 | 2 |
| 4 | srv2_cfg3 | 3 | 2 |
| 5 | srv3_cfg1 | 1 | 3 |
| 6 | srv1_cfg2 | 2 | 1 |
| 7 | srv1_cfg3 | 3 | 1 |
我想查询 Config 表,只获取每个服务器 id 的“config_version”字段最大值的行,例如:
Desired result:
| id | configuration | config_version | serverid | servername |
| ------ | ------------- | -------------- | -------- | ---------- |
| 4 | srv2_cfg3 | 3 | 2 | Server2 |
| 5 | srv3_cfg1 | 1 | 3 | Server3 |
| 7 | srv1_cfg3 | 3 | 1 | Server1 |
我尝试了许多不同的选项来构建正确的查询,但到目前为止我无法得到我想要的。我最好的结果是查询 Server 表:
Server.objects.annotate(maxver=Max('config__config_version'))
但我似乎无法访问 Config 表对象,所以我想我需要通过一些过滤来查询 Config 表?
我可以使用原始 SQL 查询来执行此操作,但我更愿意以“Django”方式执行此操作。任何帮助将不胜感激。
【问题讨论】:
标签: django django-models