根据 Django 中的对象计数按一对多关系过滤

Mic*_*ith 2 python django django-queryset

我有 4 个与餐厅有关的模型,但无法返回正确的结果。

该模型是AdminEnteredRestaurantRestaurantPhotoMenu和被定义为这样的:

class AdminEnteredRestaurant(models.Model):
    restaurant = models.OneToOneField(Restaurant)
    ...

class Restaurant(models.Model):
    name = models.CharField(max_length= 100)
    ...

class Photo(models.Model):
    restaurant = models.ForeignKey(Restaurant)
    ...

class Menu(models.Model):
    restaurant = models.OneToOneField(Restaurant)
    ...
Run Code Online (Sandbox Code Playgroud)

我想要的查询是过滤所有AdminEnteredRestaurants 并仅返回那些AdminEnteredRestaurant具有 1 个或更少Photos 和 0 个菜单的s。我该怎么做?

ben*_*rew 6

我会使用Countannotatelteisnull来制作类似的东西

from django.db.models import Count
results = AdminEnteredRestaurant.objects.annotate(num_photos=Count('restaurant__photo')) \
                                        .filter(num_photos__lte=1) \
                                        .filter(restaurant__menu__isnull =True)
Run Code Online (Sandbox Code Playgroud)