Django Rest框架模型排序过滤器方法
我有一个模型,它有计算平均评级的方法。如何将此方法添加到排序筛选器字段?我尝试使用FilterSet进行自定义筛选,但无法做到这一点。当我测试我的尝试时,我收到了错误。没有订单筛选的任何示例 我为“大于查找”的平均评分添加了一个筛选器,因为它在下面共享,但我无法为订单筛选添加该筛选器 模型类: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)
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