按模型集中的状态进行过滤

时间:2014-03-20 14:44:57

标签: python django

我有一个Customer模型,其中包含许多Location个,即模型上有一个location_set属性,用于返回位置列表。每个Location也有许多客户,即customer_set属性。

我有一个客户实例及其所有相应的属性。我想要做的是返回至少位于客户location_set中的所有位置的所有其他客户。有没有一种干净的方法来做到这一点,而无需手动操作查询集并对数据库进行大量调用?

class Customer(AbstractUser):

    current_location = models.ForeignKey('device.Location',
            null=True, blank=True, related_name='customers_present')
    default_location = models.ForeignKey('device.Location',
            null=True, blank=True, related_name='default_customers')

class Location(models.Model):

    name = models.CharField(max_length=50, help_text="The name of the location")
    customers = models.ManyToManyField(settings.AUTH_USER_MODEL,
            through='customer.Membership')

class Membership(models.Model):
    customer = models.ForeignKey(Customer)
    location = models.ForeignKey('device.Location')
    date_joined = models.DateTimeField(auto_now_add=True)

1 个答案:

答案 0 :(得分:1)

如果没有您的模型定义,很难为您的问题提供准确的答案,如下所示:

Customer.objects.filter(location__in=your_customer_instance.location_set.all()).exclude(pk=your_customer_instance.pk)