我有一个简单的问题。我有两种型号(服务员和经理(,它们都包含相同的餐厅外键:
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.id
的Managers
对象相关的Waiters
对象。
这个怎么样??
queryset = Managers.objects.filter(id=request.usr.id and Waiters.objects.filter(restaurant=manager.restaurant_id))