这是我正在使用的三个非常简化的类:
class User(AbstractBaseUser):
email = models.EmailField()
name = models.CharField()
is_admin = models.BooleanField()
phone_number = models.CharField()
class Accounts(models.Model):
name = models.CharField()
users = models.ManyToManyField(settings.USR_MODEL, through='Membership',
null=True, blank=True)
customer_id = models.IntegerField()
class Membership(models.Model):
user = models.ForeignKey(User)
company = models.ForeignKey(Accounts)
is_admin = models.BooleanField(default=False)
is_billing = models.BooleanField(default=False)
is_tech = models.BooleanField(default=False)
我希望能够获取与帐户相关联的用户,并通过 bool 属性 is_admin、is_billing、is_tech 对其进行过滤。现在我正在做:
microsoft = Accounts.objects.get(customer_id=1)
然后我可以通过这样做获得技术联系
ms_tech = microsoft.filter(membership__is_tech=True)
这有效,但是,我希望能够动态地创建查询 membership__is_tech/__is_billing/__is_admin/__is_foo/__is_bar/__is_quux/etc 最 pythonic/djangonic 的方式是什么?
最佳答案
鉴于您只有一定数量的字段,我不太确定动态创建查询是什么意思。但是您也许可以使用查询是函数的关键字参数这一事实,因此可以用字典和 **
语法替换:
kwargs = {'membership__is_tech': True}
ms_tech = microsoft.filter(**kwargs)
(请注意,您提供的过滤器中不应有 objects
,因为 microsoft
已经是一个查询集,而不是模型。)
关于python - django 中的动态 SQL 连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19893179/