我认为按用户筛选对象的正确方法是在视图中完成的,因为您可以很容易地要求登录,并且可以访问request.user
。但是我有一个调用对象的classmethod的视图,它不能与筛选器结合,因为它将queryset转换为list对象-所以我想如果有一种方法可以通过用户直接在模型中筛选queryset,那么当我在视图中调用classmethod时,对象就已经被筛选了。
以下是我的观点:
def leads_by_city(request):
# Invoke Lead classmethod to get the data
data = Lead.objects.get_leads_per_city()
return JsonResponse(data, safe=False)
带有自定义管理器的模型:
class Lead(models.Model):
user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
source = models.ForeignKey(LeadSource, on_delete=models.CASCADE)
city = models.CharField(max_length=100)
objects = LeadManager()
class LeadManager(models.Manager):
def get_leads_per_city(self):
queryset = self.values('city').annotate(Count('id')).order_by('city')
data = list(queryset.values('city', 'id__count'))
return data
在ClassMethod中有没有按用户筛选的方法?也许像:
class LeadManager(models.Manager):
def get_leads_per_city(self,user):
queryset = self.filter(user=Lead.user).values('city').annotate(Count('id')).order_by('city')
data = list(queryset.values('city', 'id__count'))
return data
是的,尽管您的筛选有点不正常,但您可以简单地设置.filter(user=user)
:
class LeadManager(models.Manager):
def get_leads_per_city(self, user):
queryset = self.filter(
user=user
).values('city').annotate(Count('id')).order_by('city')
return list(queryset.values('city', 'id__count'))
user=user
参数名称不引用函数的user
参数。Django ORM将查找具有该名称的字段,我们将参数调用的user
传递给它。
在您看来,您可以使用以下命令调用此命令:
def leads_by_city(request):
# Invoke Lead classmethod to get the data
data = Lead.objects.get_leads_per_city(request.user)
return JsonResponse(data, safe=False)
话虽如此,这里您使用Django的queryset
机制来生成字典。这通常是不可取的。您可能希望使用序列化器
,这是Django REST框架[drf-doc]提供的。
此外,将列表作为JSON响应传递也不是一个好主意。JSON利用了这个漏洞,您最好将其封装在字典中。
由于您需要登录的用户,因此最好在此处添加@login_required
修饰符[Django-doc],如果用户尚未登录,它将返回HTTP重定向响应:
from django.contrib.auth.decorators import login_required
@login_required
def leads_by_city(request):
# Invoke Lead classmethod to get the data
data = Lead.objects.get_leads_per_city(request.user)
return JsonResponse({'data': data})
是否有方法将queryset筛选器与模板标记结合起来? 我正在努力做到以下几点: 其他变体: 有没有办法得到我需要的过滤?我正在尝试为超级用户/工作人员和常规用户显示不同的查询集,这样我就可以进行一些状态更新等,而不必进入管理页面。
我想知道如何按日期字段筛选firebase firestore,因为我看不到字符串、数字、布尔值以外的数据类型 如下所示,如果有人找到了一种基于日期字段筛选firestore集合的方法,请提供建议。
为了提供良好的用户体验,实现需要做一些事情 视图中的 : 检查传递的筛选器参数是否有效 检查筛选器的类型(基于其他模型或自定义筛选器),以便将正确的条件应用于查询集 (可选)使筛选器累积的方法(即可以不断添加筛选器) 根据筛选器选择显示正确的结果集n 显示筛选器时,请识别应用的筛选器,以便当前应用的筛选器显示为文本,而不是超链接。
我看不到任何关于何时应该使用查询或过滤器或两者结合的描述。他们之间有什么区别?谁能解释一下吗?
我想用Django的。具有相关子对象列表的filter()方法返回包含所有子记录的父对象集。见下面的例子。 用户是父对象,颜色是与用户直接相关的子对象 用户1有颜色 User2有颜色 User3有颜色 User4有颜色 “颜色”是由帖子设置的列表。例如, 当前,用户包含具有任何的用户集。对于上面的示例集,我目前正在使用上面的代码获取、、和。也就是说,它正在使用OR搜索。我只想返回具有所有指定颜色的
我有一个自定义的职位类型,这是一个供应商的个人资料页排序。在每一页的末尾,我都有一个产品小部件,它应该显示这个供应商的产品。 所有产品都被分配到供应商特定的类别。因此供应商A的个人资料页面应显示分配给product_catA的所有产品。 相应的产品类别由每个配置文件页面上的acf字段指定。因此,我的自定义筛选查询需要获取指定的产品目录,然后按该类别筛选所有产品。我正在努力研究如何将帖子中的自定义字