python - 在django查询集中动态定义过滤器参数

标签 python python-3.x django django-views django-queryset

假设我们有这样一个模型:

class Membership(models.Model):
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    date_joined = models.DateField()
    invite_reason = models.CharField(max_length=64)

我们可以将x作为过滤器内的变量,以便在调用get_queryset函数时通过给出不同的参数来获得不同的查询集吗?

def get_queryset(x, y):
    queryset = Membership.objects.filter(x=y)
    return queryset

最佳答案

一个Q object [Django-doc]可以采用一个 2 元组,其中第一项是指定“key”的字符串,第二项是“value”,因此您可以使用以下内容进行过滤:

from django.db.models import Q

x = 'person_id'
y = 14

Membership.objects.filter(<b>Q((x, y))</b>)

获取 person_id=14成员(member)资格

然而,在基于类的 View 中的 get_queryset 中使用它没有多大意义,因为该函数必须遵守其代码约定,并且添加额外的参数将不起作用:它只是期望一个self,以及一个可选的queryset。您可以添加额外的可选参数,但当 View 调用 get_queryset 时,它不会使用这些参数,或者至少在您不更改样板逻辑的情况下不会使用这些参数。

关于python - 在django查询集中动态定义过滤器参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65265137/

相关文章:

python - .format(self=self) 是如何使用的?

python - 如何通过Tensorflow python导入多个图像

Django 无法覆盖表单字段小部件

python - Django:缺少 ManagementForm 数据...Formset 将无法验证。为什么?

python - 如何在 Selenium 的下拉列表中选择项目

python - 将数据帧转换为 numpy 矩阵

django - 覆盖 Django REST Frameworks 更新方法以保存嵌套的序列化程序

javascript - 从 JavaScript 调用 Django View

python - 无法将表写入 Pandas DataFrame

python - Paramiko 有时会引发 'AuthenticationException'