Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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 Rest框架模型排序过滤器方法_Django_Django Rest Framework_Django Filters - Fatal编程技术网

Django Rest框架模型排序过滤器方法

Django Rest框架模型排序过滤器方法,django,django-rest-framework,django-filters,Django,Django Rest Framework,Django Filters,我有一个模型,它有计算平均评级的方法。如何将此方法添加到排序筛选器字段?我尝试使用FilterSet进行自定义筛选,但无法做到这一点。当我测试我的尝试时,我收到了错误。没有订单筛选的任何示例 我为“大于查找”的平均评分添加了一个筛选器,因为它在下面共享,但我无法为订单筛选添加该筛选器 模型类: class Establishment(models.Model): owner = models.ForeignKey(User, on_delete=models.PROTECT)

我有一个模型,它有计算平均评级的方法。如何将此方法添加到排序筛选器字段?我尝试使用FilterSet进行自定义筛选,但无法做到这一点。当我测试我的尝试时,我收到了错误。没有订单筛选的任何示例

我为“大于查找”的平均评分添加了一个筛选器,因为它在下面共享,但我无法为订单筛选添加该筛选器

模型类:

    class Establishment(models.Model):
    owner = models.ForeignKey(User,  on_delete=models.PROTECT)
    name = models.CharField(max_length=255, null= False, blank = False, unique=True)
    description = models.TextField(max_length=360, blank = True, null=True)
    address = models.TextField(max_length=360, blank = True, null=True)
    phone = PhoneNumberField(null=False, blank=False)
    city = models.CharField(max_length=15, null= False, blank = False)
    district = models.CharField(max_length=50, null= False, blank = False)
    latitude = models.DecimalField(max_digits=9, decimal_places=6, null=False, blank=False)
    longitude = models.DecimalField(max_digits=9, decimal_places=6, null=False, blank=False)
    cuisine = models.CharField(max_length=255, null= False, blank = False)
    zipcode = models.IntegerField(null=True, blank=True)
    average_price = models.IntegerField(blank = True, null=True)
    profile_photo = models.ImageField(blank=True, null=True, upload_to=upload_path('profile_image'))

    def no_of_ratings(self):
        ratings = EstablishmentRating.objects.filter(establishment=self)
        return len(ratings)

    def average_rating(self):
        ratings = EstablishmentRating.objects.filter(establishment=self)
        return sum(rate.rating for rate in ratings) / (len(ratings) or 1)

    def __str__(self):
        return self.name
相关视图集:

class EstablishmentViewSet(viewsets.ModelViewSet):
    queryset = Establishment.objects.all()
    serializer_class = EstablishmentSerializer
    authentication_classes = (TokenAuthentication,)
    filter_backends = (DjangoFilterBackend,filters.SearchFilter, filters.OrderingFilter,)
    filterset_class  = [EstablishmentFilter,]
    search_fields = ['$name',"$cuisine"]
    ordering_fields = ('name','average_rating','average_price','cuisine')
我收到了这个错误:

线程django主线程中的异常: 回溯(最近一次呼叫最后一次): 文件“D:\Anaconda\envs\backend\lib\threading.py”,第926行,在\u bootstrap\u内部 self.run() 文件“D:\Anaconda\envs\backend\lib\threading.py”,第870行,正在运行 自我目标(*自我参数,**自我参数) 文件“D:\Anaconda\envs\backend\lib\site packages\django\utils\autoreload.py”,第53行,在包装器中 fn(*args,**kwargs) 文件“D:\Anaconda\envs\backend\lib\site packages\django\core\management\commands\runserver.py”,第117行,在内部运行 self.check(display\u num\u errors=True) 检查文件“D:\Anaconda\envs\backend\lib\site packages\django\core\management\base.py”,第395行 包括部署检查=包括部署检查, 文件“D:\Anaconda\envs\backend\lib\site packages\django\core\management\base.py”,第382行,在运行检查中 返回检查。运行检查(**kwargs) 运行检查中第72行的文件“D:\Anaconda\envs\backend\lib\site packages\django\core\checks\registry.py” 新建错误=检查(应用程序配置=应用程序配置) 文件“D:\Anaconda\envs\backend\lib\site packages\django\core\checks\url.py”,第13行,在check\u url\u config中 返回检查\u分解器(分解器) 文件“D:\Anaconda\envs\backend\lib\site packages\django\core\checks\url.py”,第23行,在check\u解析器中 返回检查方法() 检查文件“D:\Anaconda\envs\backend\lib\site packages\django\url\resolvers.py”,第407行 对于self.url_模式中的模式: 文件“D:\Anaconda\envs\backend\lib\site packages\django\utils\functional.py”,第48行,在__ res=instance.\uuuu dict\uuuu[self.name]=self.func(实例) 文件“D:\Anaconda\envs\backend\lib\site packages\django\url\resolvers.py”,第588行,url\U模式 patterns=getattr(self.urlconf_模块,“urlpatterns”,self.urlconf_模块) 文件“D:\Anaconda\envs\backend\lib\site packages\django\utils\functional.py”,第48行,在__ res=instance.\uuuu dict\uuuu[self.name]=self.func(实例) 文件“D:\Anaconda\envs\backend\lib\site packages\django\url\resolvers.py”,第581行,在urlconf_模块中 返回导入_模块(self.urlconf_名称) 文件“D:\Anaconda\envs\backend\lib\importlib\\uuuuu init\uuuuu.py”,第127行,在导入模块中 return _bootstrap._gcd_import(名称[级别:],包,级别) 文件“”,第1006行,在\u gcd\u导入中 文件“”,第983行,在_find_和_load中 文件“”,第967行,在“查找”和“加载”中解锁 文件“”,第677行,在\u加载\u解锁 exec_模块中第728行的文件“” 文件“”,第219行,在“调用”中,删除了“帧” 文件“D:\Murat\Startup\backend\pintico\pintico\url.py”,第23行,在 路径('api/',包括(“backend_api.url”), 文件“D:\Anaconda\envs\backend\lib\site packages\django\url\conf.py”,第34行,包含 urlconf_模块=导入_模块(urlconf_模块) 文件“D:\Anaconda\envs\backend\lib\importlib\\uuuuu init\uuuuu.py”,第127行,在导入模块中 return _bootstrap._gcd_import(名称[级别:],包,级别) 文件“”,第1006行,在\u gcd\u导入中 文件“”,第983行,在_find_和_load中 文件“”,第967行,在“查找”和“加载”中解锁 文件“”,第677行,在\u加载\u解锁 exec_模块中第728行的文件“” 文件“”,第219行,在“调用”中,删除了“帧” 文件“D:\Murat\Startup\backend\pintico\backend\u api\url.py”,第3行,在 从.views导入基本、注册、激活、用户视图集、建立视图集、\ 文件“D:\Murat\Startup\backend\pintico\backend\u api\views.py”,第23行,在 from.filters导入设施筛选器 文件“D:\Murat\Startup\backend\pintico\backend\u api\filters.py”,第5行,在 类建立筛选器(filters.FilterSet): 文件“D:\Anaconda\envs\backend\lib\site packages\django\u filters\filterset.py”,第71行,在新的__ new_class.base_filters=new_class.get_filters() 文件“D:\Anaconda\envs\backend\lib\site packages\django\u filters\filterset.py”,第352行,在get\u filters中 “%s”%,“。联接(未定义) TypeError:“Meta.fields”包含未在此筛选器集上定义的字段:average_rating