-1

Djnagoモデル:

class RootTable(models.Model):
    id = models.IntegerField(primary_key=True)
    field1 = models.CharField(max_length=100, unique=True)
    field2 = models.CharField(max_length=120, unique=True)

class SubTableA(models.Model):
    id = models.IntegerField(primary_key=True)
    field1 = models.ForeignKey(RootTable, null=True, blank=True)
    subtableAfield1 = models.CharField(max_length=180, blank=True)

class SubTableB(models.Model):
    id = models.IntegerField(primary_key=True)
    field1 = models.ForeignKey(SubTableA, null=True, blank=True)
    subtableBfield1 = models.CharField(max_length=180, blank=True)

class SubTable2(models.Model):
    id = models.IntegerField(primary_key=True)
    field1 = models.ForeignKey(RootTable, null=True, blank=True)
    subtable2field1 = models.CharField(max_length=180, blank=True)
    subtable2field2 = models.CharField(max_length=180, blank=True)


このようなリクエストを使用する場合:

RootTable.objects.filter( subtable2__subtable2field1 = 'text' )

'RootTable'からのみ値を返します。
SQL:

SELECT  'roottable'.'id',
        'roottable'.'field1',
        'roottable'.'field2',
FROM 'roottable'
INNER JOIN ...

しかし、他のテーブルからすべての接続された値を取得するにはどうすればよいですか?
SQL:

SELECT  'roottable'.'id',
        'roottable'.'field1',
        'roottable'.'field2',
        'subtablea'.'subtableafield1',
        'subtableb'.'subtablebfield1',
        'subtable2'.'subtable2field1',
        'subtable2'.'subtable2field2',
FROM 'roottable', 'subtablea', 'subtableb', 'subtable2'
INNER JOIN ...

更新

次のような応答があります。

[
{ 'roottable.id' : 'rid'},
{ 'subtablea.id' : 'id'},
{ 'subtablea.subtableafield1' : 'value1' },
...
{ 'roottable.id' : 'rid'},
{ 'subtablea.id' : 'id'},
{ 'subtablea.subtableafield1' : 'value2' },
]

しかし、私はこのようなものが必要です:

[
{ 'roottable.id' : 'rid'},
{ 'subtablea.id' : 'id'},
{ 'subtablea.subtableafield1' : ['value1','value2'] },
]

そのような構造を取得するための迅速な方法はありますか?

4

1 に答える 1

0

Djangofilter()クエリは、特定の属性ではなくオブジェクトを返します。ただし、を使用values()して属性dictのみを返すことができます。これは、関連フィールドの属性を取得することもできます。

ただし、副作用として、取得する属性名を渡す必要があります(SQLと同様)。

したがって、クエリを次のように変更できます

RootTable.objects.filter(subtable2__subtable2field1='text').values('field1', 
    'field2', 'subtablea__subtable1field1', 'subtableb__subtable2field1')

Djangoクエリセット値の詳細

于 2012-09-06T10:35:27.010 に答える