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テーブルクエリすることです:
Server.objects.annotate(maxver=Max('config__config_version'))
をしかし、私がコンフィグテーブルオブジェクトへのアクセスを得ることができないようですので、私は、私はいくつかのフィルタリングをコンフィグテーブルを照会する必要があると思いますか?
私は生のSQLクエリでこれを行うことができますが、私は強く "Django"のやり方をしたいと思います。どんな助けでも大歓迎です。