我有两种型号
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的查询集
答案 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