Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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
Django Meta.fields包含一个非';t在此过滤器集上定义:****_Django_Django Models_Django Filter - Fatal编程技术网

Django Meta.fields包含一个非';t在此过滤器集上定义:****

Django Meta.fields包含一个非';t在此过滤器集上定义:****,django,django-models,django-filter,Django,Django Models,Django Filter,我正在使用Django过滤器包 我在视图中按照以下方式定义过滤器 class UnitFilter(django_filters.FilterSet): class Meta: model = Unit fields = [ 'floor', 'number', 'building','lease','leaseterm', 'lease__is_active','lease__is_terminated'

我正在使用Django过滤器包

我在视图中按照以下方式定义过滤器

class UnitFilter(django_filters.FilterSet):
    class Meta:
        model = Unit
        fields = [
            'floor', 'number', 'building','lease','leaseterm', 
            'lease__is_active','lease__is_terminated','lease__is_renewed',]
我的筛选所依据的单元模型

class Unit(CommonInfo):
    version = IntegerVersionField( )
    number = models.CharField(max_length=30,null=True, blank=True)
    max_occupants = models.PositiveSmallIntegerField()
    floor = models.PositiveSmallIntegerField()
    rooms = models.PositiveSmallIntegerField()
    is_disabled_access = models.BooleanField(default=False)
    balcony_quantity = models.PositiveSmallIntegerField()
    building = models.ForeignKey(Building)
    recomended_price = models.DecimalField(max_digits=7, decimal_places=2)
    _lease = None
    _leaseterm = None
    #check = models.ManyToManyField(UnitCheck, through='UnitChecklist')

    def _get_total(self):

        from conditions.models import LeaseTerm
        from lease.models import Lease

        lease_dict = Lease.objects.filter(unit_id=self.id, is_active = True , is_terminated = False).aggregate(Max('id'))
        if lease_dict['id__max']:
            lease =  lease_dict['id__max'] 
        else:  
            lease =  0

        leaseterm_dict = LeaseTerm.objects.filter(lease_id=lease, is_active = True , is_terminated = False).aggregate(Max('id'))
        if leaseterm_dict['id__max']:
            leaseterm =  leaseterm_dict['id__max'] 
        else:  
            leaseterm =  0

        self._lease = lease
        self._leaseterm = leaseterm

    @property
    def lease(self):
        if self._lease is None:
            self._get_total()
        return self._lease

    @property
    def leaseterm(self):
        if self._leaseterm is None:
            self._get_total()
        return self._leaseterm
此模型中有2个计算属性 租赁和租赁人

当leaseterm给我这个错误时,租赁财产没有问题

Meta.fields包含未在此筛选器集上定义的字段: 至少

为什么??这是django filter中的一个bug?有什么解决方法吗?

请参阅以获得良好的解释

当您执行
queryset.filter(field\u name=field\u value)
时,Django将其转换为SQL查询。不幸的是,计算属性只存在于Python对象上,因此不能按它们进行过滤

解决方法是,无论何时按其中一个进行筛选,都要在queryset中包含注释,以便在SQL中添加适当的字段。这个链接有一个很好的例子来说明如何做到这一点。这比用Python做要难,但这是唯一真正可行的方法