Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:我如何筛选只返回那些已经支付了>=10000_Python_Django Filter - Fatal编程技术网

Python Django:我如何筛选只返回那些已经支付了>=10000

Python Django:我如何筛选只返回那些已经支付了>=10000,python,django-filter,Python,Django Filter,这是我的模特 class Candidate(models.Model): person = models.OneToOneField( Person, related_name='person_candidate', on_delete=models.PROTECT) def __str__(self): return str(self.person)

这是我的模特

 class Candidate(models.Model):
            person = models.OneToOneField(
                Person, related_name='person_candidate', on_delete=models.PROTECT)

            def __str__(self):
                return str(self.person)

            @property
            def total_candidate_votes(self):
                return self.candidate_votes.filter(candidate=self).count()

            @property
            def amount_paid(self):
                return self.candidate_payments.aggregate(models.Sum('fees'))['fees__sum'] or 0

            @property
            def is_qualified_to_vie(self):
                return self.amount_paid >= 10000
帮助我创建一个筛选器,该筛选器将显示仅支付>=10000的候选人 Filter.py

class CandidateFilter(django_filters.FilterSet):
    name = django_filters.CharFilter(lookup_expr='iexact', name='person__first_name')
    is_qualified_to_vie = django_filters.BooleanFilter(method='filter_by_qualified_candidates')

    def filter_by_qualified_candidates(self, queryset, field, value):
        return queryset.filter

问题是python属性无法转换为django过滤器表达式。除了这里的python属性之外,我建议使用自定义queryset方法。如下所示:

class CandidateQuerySet(models.QuerySet):
def注释金额(自付):
return self.annotate(amount\u paid=models.Sum('candidate\u payments\u fees'))
def合格到vie(自我,是=真):
#例如,Candidate.objects.qualified_to_vie()
qs=返回自我。注释金额支付()
如果是:
返回数量过滤器(已支付金额=10000)
返回qs.filter(已支付金额=10000)
班级候选人(模型。模型):
...
objects=CandidateQuerySet.as_manager()
从这里开始,这相当简单

class CandidateFilter(filters.FilterSet):
is_qualified_to_vie=django_filters.BooleanFilter(方法='filter_by_qualified_candidates')
def筛选依据符合条件的候选项(自我、查询集、名称、值):
将queryset.qualified_返回到_vie(值)
请注意,以上只是想法的要点,可能需要进行一些更改才能真正发挥作用