2012-06-13 10 views
8

良い。しかし、これで何かDjango-yをしようとすると、Post(title="foo", summary="bar")のように、それはぴったりです。 DjangoにPythonのプロパティを使いやすくする方法はありますか?DjangoのモデルとPythonのプロパティ

+0

これはPythonの標準的なメソッドです(http://docs.python.org/library/functions.html#property)。私は明示的に 'property'を呼び出す代わりにデコレータスタイルを使用しています。 – futuraprime

+0

'Post(body =" foo "、summary =" bar ")'?( 'title'ではなく' body'に注意してください)。これはうまくいくはずです。 – okm

+0

@okmそのタイプミスを修正しました。これは明らかに誤った入力であった 'Post(title =" foo "、summary =" bar ")と言っていました。 – Buttons840

答えて

12

残念ながら、DjangoモデルはPythonのプロパティではうまく動作しません。 ORMは、動作する方法として、QuerySetフィルタのフィールドインスタンスの名前のみを認識します。

フィルタでsummaryを参照することはできません。代わりに_summaryを使用する必要があります。これは厄介な本当の迅速な取得、マルチテーブルクエリでこのフィールドを参照するには、たとえば、あなたは、プロパティのサポートの詳細についてhttps://code.djangoproject.com/ticket/3148を参照してください

User.objects.filter(post___summary__contains="some string") 

のようなものを使用する必要があると思います。

+0

これを試しましたか? [コード](https://github.com/django/django/commit/90acc8ff7e1b27b5c2f7cd5a2440d94d5fa22445#L0R153)は、5年前から 'kwargs'を使ってプロパティを割り当てることができることを示しています... – okm

+0

ああ、あなたが正しいと思われる - コンストラクタはプロパティをサポートします。これは 'GenericForeignKey'をサポートするためです。しかし、QuerySetsに関するもう1つの議論が成り立っています。 – koniiiik

関連する問題