python - django 中的动态 SQL 连接查询

标签 python mysql sql django

这是我正在使用的三个非常简化的类:

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/

相关文章:

php - 将 session 变量传递到 mysql 查询时遇到问题?

php - 多种功能的交易

python - Tensorflow 自定义学习率调度程序给出意外的 EagerTensor 类型错误

python - 在 Django 中获取数据库类型

mysql - 搜索加在一起的两个 mysql 列以查找一个变量

php - Codeigniter,无法建立 session ?

MySql存储过程,如何用CONCAT插入多个变量

python - 在非交互式环境中应用 Django 迁移

python - PyTorch 中 "*"运算符在张量大小之前做什么?

php - MySQL 语法错误(与 PHP 一起使用)