基于缺少反向关系的Pythonically过滤器Django queryset

基于缺少反向关系的Pythonically过滤器Django queryset,django,Django,假设我有两个Django模型,比如产品和制造商,希望找到没有产品的制造商 class Product(Model): name = models.CharField() manufacturer = models.ForeignKey(Manufacturer) class Manufacturer(Model): name = models.CharField() 我想生成一组任何产品对象都没有引用的所有制造商对象。我可以想出很多方法来制作这套装置,但是没有一种看起来

假设我有两个Django模型,比如产品和制造商,希望找到没有产品的制造商

class Product(Model):
    name = models.CharField()
    manufacturer = models.ForeignKey(Manufacturer)
class Manufacturer(Model):
    name = models.CharField()
我想生成一组任何产品对象都没有引用的所有制造商对象。我可以想出很多方法来制作这套装置,但是没有一种看起来干净或者像蟒蛇一样

  • 给定所有产品的查询集,生成一组拥有产品的所有制造商。然后取所有制造商与制造商_和_产品的设置差异,如下所述:
  • 根据与任何产品没有反向关系过滤制造商对象。Django使基于反向关系的属性进行过滤变得很容易,但我无法找到一种基于这种反向关系的存在进行过滤的干净方法
  • 例如,我可以简单地筛选至少有一种产品满足以下条件的制造商:

    models.Manufacturer.objects.filter(product__name=x)
    
    我希望能够过滤出更像

    models.Manufacturer.objects.exclude(product__exists)
    
    我可能会在产品的某些公理/重言式上排除/过滤制造商,但这似乎也不太符合实际。

    这可以通过使用和过滤器来实现:

    from django.db.models import Count
    idle = Manufacturers.objects.annotate(num_products=Count('product')).filter(num_products=0)
    

    idle
    将包含没有产品的制造商列表,但请记住,他们还将拥有一个属性
    num\u products
    ,由于查询,该属性将为0。

    对于
    ManyToManyField