查询一个多使用参考表的许多领域ORM

查询一个多使用参考表的许多领域ORM

问题描述:

我的型号如下:查询一个多使用参考表的许多领域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') 

但是,这是行不通的。我是否可以访问像这样的多对多字段,或者是否需要通过表创建自定义字段。

是的,你可以。

对于查询集:

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); 

看起来不错。也许它不像你预期的那样工作?