4

我在应用程序中有以下模型(恢复):

class Account(models.Model):
    name = models.CharField(max_length=64)
    plans = models.ManyToManyField('Plan')
    extra_services = models.ManyToManyField('Service')

class Plan(models.Model):
    name = models.CharField(max_length=64)
    services = models.ManyToManyField('Service')

class Service(models.Model):
    name = models.CharField(max_length=64)

这里的计划只是服务的聚合,但一个帐户可能有单独的服务。在管理员(帐户)中,我想显示一个选择框,其中包含与任何计划无关的所有服务(extra_services)。我可以用来得到这个的最好的查询集是什么(在limit_choices_to中)?

PS:我不想遍历所有计划以获取所有链接的服务 ID,然后将它们排除在过滤器中。

4

2 回答 2

4

Service.objects.filter(plan_set__isnull=True)应该做。

您可以在文档中找到进一步的解释。

于 2011-03-18T11:51:30.770 回答
1

好的,我使用原始 SQL 查询得到了这个:

services = Service.objects.raw('SELECT * FROM accounts_service WHERE id NOT IN(SELECT service_id FROM accounts_plan_services);')

无论如何,我可以在没有原始 SQL 查询的情况下做到这一点吗?

于 2011-03-18T13:00:13.460 回答