0
我是Django的新手,我试图创建一个简单的应用程序,用于跟踪SQlite数据库中不同的服务器配置。我创建了2个数据库模型:Django模型获取基于其他列最大值的唯一外键行
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_version的最大值来查询配置表,并获得唯一的行“现场的每个服务器ID,如:
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.objects.annotate(maxver=Max('config__config_version'))
但似乎我无法访问配置表对象,所以我想我需要查询的配置表,一些过滤?
我可以用一个原始的SQL查询来做到这一点,但我强烈倾向于这样做“Django”的方式。任何帮助都感激不尽。