Django过滤和其他模型的外键相关的模型的查询集



我有一个简单的问题。我有两种型号(服务员和经理(,它们都包含相同的餐厅外键:

class Managers(BaseUser):
restaurant = models.ForeignKey(Restaurants, on_delete=models.CASCADE)
class Waiters(BaseUser):
restaurant = models.ForeignKey(Restaurants, on_delete=models.CASCADE)

餐厅模式:

class Restaurants(models.Model):
name = models.CharField(max_length=200)
description = models.TextField(max_length=250)
location = models.CharField(max_length=200)
rating = models.DecimalField(null=True, decimal_places=2, max_digits=5)

所以我需要让那家餐厅的所有服务员=经理__restaurant_id。

我认为在SQL中应该是:

select *
From Waiters w
Left outer join Managers m
On w.restaurant_id = m.restaurant_id

备注*我可以查询如下:

manager = Managers.objects.filter(id=request.usr.id)
queryset=Waiters.objects.filter(restaurant=manager.restaurant_id)

但是有没有任何方法可以让我在一个查询中完成它。

但是有什么方法可以在一个查询中做到这一点吗。

这是在一个查询中,但它将与子查询一起工作。效率可能没有那么高。

然而,您可以使用以更紧凑的方式进行过滤

Waiters.objects.filter(restaurant__managers=request.user.id)

我们可以看看";通过";关系使用双下划线(__(。因此,我们在这里寻找与给定id为request.user.idManagers对象相关的Waiters对象。

这个怎么样??

queryset = Managers.objects.filter(id=request.usr.id and Waiters.objects.filter(restaurant=manager.restaurant_id))

相关内容

  • 没有找到相关文章

最新更新