django-如何将具有外键的多个模型的结果与同一用户合并?
我有多个模型指向同一用户,如下所示:django-如何将具有外键的多个模型的结果与同一用户合并?,django,django-models,django-views,django-queryset,Django,Django Models,Django Views,Django Queryset,我有多个模型指向同一用户,如下所示: class Model1(moldels.Model): user = models.ForeignKey(User) title = models.CharField() ... class Model2(moldels.Model): user = models.ForeignKey(User) ... class Model3(moldels.Model): user = models.F
class Model1(moldels.Model):
user = models.ForeignKey(User)
title = models.CharField()
...
class Model2(moldels.Model):
user = models.ForeignKey(User)
...
class Model3(moldels.Model):
user = models.ForeignKey(User)
...
objs1 = Model.objects.filter(title__icontains='YOUR FILTER')
users = objs1.values('user').distinct()
objs2 = Model2.objects.filter(user__in=users)
objs3 = Model3.objects.filter(user__in=users)
objs = list(objs1)
objs.extend(list(objs2))
objs.extend(list(objs3))
return objs
如何在
Model1
上的title
字段中进行搜索/筛选,并将来自具有相同用户的其他模型的结果合并在一起。只有Moldel1将为同一用户返回多个结果。Model2和Model3将始终为每个用户返回一个结果(如一个化身和一个配置文件)。-谢谢大家! 这取决于你所说的“加入”是什么意思。您可以通过用户
和模型的相关名称
(默认情况下:\u集
)从任何其他用户访问一个,例如:
或者,您可以使用用户实例直接访问每个实例:
user.model1_set.all()
user.model2_set.all()
user.model3_set.all()
您也可以通过用户查询这些模型,包括查询遍历:
User.objects.filter(model1__title='some title')
最后,对于只有一个实例的模型,例如每个用户一个概要文件,您应该真正使用OneToOneField
,而不是ForeignKey
。如果您这样做,则可以对属于OneToOneField
(真正的SQL联接)的任何反向关系使用select\u related
,例如:
但是,
select_related
不适用于反向外键关系或多对多关系。为此,您必须等待Django 1.4在与预取相关的中删除,如果您想要获得查询集,这是不可能的。您无法获得各种模型的查询集
但我认为你想要这样的东西:
class Model1(moldels.Model):
user = models.ForeignKey(User)
title = models.CharField()
...
class Model2(moldels.Model):
user = models.ForeignKey(User)
...
class Model3(moldels.Model):
user = models.ForeignKey(User)
...
objs1 = Model.objects.filter(title__icontains='YOUR FILTER')
users = objs1.values('user').distinct()
objs2 = Model2.objects.filter(user__in=users)
objs3 = Model3.objects.filter(user__in=users)
objs = list(objs1)
objs.extend(list(objs2))
objs.extend(list(objs3))
return objs