假设我们有这样一个模型:
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/