2017-06-22 64 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); 

看起來不錯。也許它不像你預期的那樣工作?