查询一个多使用参考表的许多领域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);
看起来不错。也许它不像你预期的那样工作?