通过OneToOne关系从另一个查询集中获取一个查询集

时间:2020-08-18 06:29:10

标签: python django

我有两种型号

library(dplyr)
d <-  read.table(text = "
             ego    alter   wave
   1        5      1
   1        4      1
                 1        5      2
                 1        2      2
                 1        3      2
                 2        8      1
                 2        8      2
                 2        8      3
                 3        4      1
                 3        7      1
                 3        6      1
                 3        6      2
                 3        7      3
                 3        6      3", header=T)


dd <-  read.table(text = "
                 ego    alter   wave
                 1        5      1
                 1        4      1
                 1        5      2
                 1        2      2
                 1        3      2
                 2        8      1
                 2        8      2
                 2        8      3
                 3        4      1
                 3        7      1
                 3        6      1
                 3        6      2
                 3        7      3
                 3        6      3
                 3 8 2
                 3 8 3
                 3 8 8
                 3 8 6
                 3 8 7", header=T)

class modelA(models.Model):
     user = models.OneToOneField(User, on_delete=models.CASCADE)

我创建的查询为:

class modelB(models.Model):
     user = models.OneToOneField(User, on_delete=models.CASCADE)
     age = models.IntegerField()

现在如何从query_set获取modelA的查询集

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

list_comprehension
user_ids = [item.user.pk for item in query_set]

使用user_ids过滤模型A

modelA.objects.filter(user__id__in=user_ids)

this will give you all modelA objects that share the same user with modelB

更好的方法是仅从用户模型进行查询。

users = User.objects.filter(modelb__age__gte=20)

如果要检查modelb或modela关系不为空,请向其添加以下过滤器:

users = User.objects.filter(modelb__isnull=False, modela__isnull=False, modelb__age__gte=20)

您可以喜欢的用户

for user in users:
    user.modela
    user.modelb