1

文字列として取得した特定のフィールドについてモデルにクエリを実行したいと思います。

デモ:

class Foo(models.Model):
    someones_name = models.CharField(max_length=100)
    anothers_name = models.CharField(max_length=100)

# python shell:
>> Foo.objects.get(pk=1).someones_name
u'Cpt. Hook'
>> Foo.objects.get(pk=1).anothers_name
u'Peter Pan'

今-私は変数にフィールドの名前を入れましたsomeones_name

>> field_name = 'someones_name'

では、そのfield_name-variableを使用してFoo-Modelに対してほぼ同じクエリを実行するにはどうすればよいですか?本当にそのようなことが可能なら?


編集

そのfield_nameでクエリを実行することは考えていません。field_nameで指定されたフィールドの正確な値が必要です。私はこのようなことができることを知っています

query = Foo.objects.get(pk=1)
query.someones_name
query.anothers_name

._meta.fields必要なのは、 (別のモデルから)動的に受け取るこの1つの特定のフィールドを文字列として取得することだけです。

RAW-SQLでは、次のようになります。'SELECT %s FROM foo where pk = 1' % field_name

4

1 に答える 1

5
field_name = 'someones_name'
Foo.objects.get(**{field_name: 'Cpt. Hook'})

これは次のようになります。

Foo.objects.get(someones_name='Cpt. Hook')

アップデート:

field_name = 'someones_name'
obj = Foo.objects.get(pk=1)
getattr(obj, field_name)

に等しい:

Foo.objects.get(pk=1).someones_name
于 2012-10-22T18:57:26.827 に答える