2017-06-22 8 views
0

を使用して:クエリ参照されるテーブルの多くの分野に多くの人が次のように私のモデルがあるORM

class AppUser(models.Model): 
    id = models.AutoField(primary_key=True) 
    user = models.OneToOneField(User) 
    states = models.ManyToManyField(State) 

class ABC(models.Model): 
    id = models.AutoField(primary_key=True) 
    name = models.CharField(max_length=50) 
    email = models.EmailField() 
    app_user = models.ForeignKey(AppUser, null=True, blank=True) 

私はABCモデルに存在するオブジェクトのリストについては、私のデータベースを照会したいと私はに応じてそれをフィルタリングします州のリスト。

私はこのような何かしようとしています:

ABC.objects.filter(app_user__states__in = state_list).values('id','name') 

をしかし、これは動作しません。このように多くのフィールドにアクセスすることも、カスタムテーブルを作成する必要がありますか。

答えて

0

はい、できます。クエリセットのために

ABC.objects.filter(app_user__states__in = [1,2]).values('id', 'name') 

あなたは、このようなSQLを取得します:

>>> print(ABC.objects.filter(app_user__states__in = [1,2]).values('id', 'name').query) 

SELECT "test_abc"."id", "test_abc"."name" 
FROM "test_abc" 
INNER JOIN "test_appuser" ON ("test_abc"."app_user_id" = "test_appuser"."id") 
INNER JOIN "test_appuser_states" ON ("test_appuser"."id" = "test_appuser_states"."appuser_id") 
WHERE "test_appuser_states"."state_id" IN (1, 2); 

が正常に見えます。おそらく期待どおりに動作しませんか?

関連する問題