在管理changelist_view中显示聚合数据
我有一个应用程序,可以在其中跟踪用户搜索。该表当前看起来像这样:
我想更改的是视图。我会根据搜索术语
列进行分组/汇总/注释视图,并保留每个搜索词的最新日期。当用户将相同的术语放在搜索栏中时,列用户搜索
正在更新,因此我无需保留所有记录。我只需要最新的一个。
我尝试使用dintive()
和Annotate()
在管理模型中更新QuerySet,但没有成功。
换句话说,我想在表中有1个唯一的术语,其中最新日期(列搜索<代码>)。
以下是我的代码:
model.py
class SearchQueryTracker(models.Model):
id = models.AutoField(primary_key=True)
author = models.ForeignKey(User, blank=True, null=True, on_delete=models.SET_NULL, unique=False)
total_results = models.IntegerField('Search results', default=0)
total_searches = models.IntegerField('User searches', default=0)
search_term = models.CharField(max_length=1000, blank=True, null=True)
searched_on = models.DateTimeField('searched on', default=timezone.now)
views.py
@login_required
def SearchViewFBV(request):
query = request.GET.get('q')
query_list = request.GET.get('q', None).split()
query_list_count = len(query_list)
user = User.objects.get(email=request.user.email)
find_duplicate_results = SearchQueryTracker.objects.filter(search_term=query).update(total_searches=F('total_searches') + 1)
....
search_tracker = SearchQueryTracker()
search_tracker.total_searches = find_duplicate_results
search_tracker.author = user
search_tracker.search_term = query
search_tracker.save()
admin.py py
class SearchQueryTrackerAdmin(ImportExportModelAdmin):
list_display = ('search_term', 'author', 'total_results', 'total_searches', 'searched_on')
readonly_fields = list_display
list_display_links = ('search_term', )
search_fields = ('search_term', )
def queryset(self, request):
qs = super(SearchQueryTrackerAdmin, self).queryset(request)
qs = qs.order_by('-searched_on',).distinct('search_term') # not working
# qs = qs.annotate(Count('searched_on')) # not working
return qs
admin.site.register(SearchQueryTracker, SearchQueryTrackerAdmin)
任何帮助或建议将不胜感激。
I have an app where I am tracking user searches. The table currently looks like this:
What I want to change is the view. I'd dlike to group/aggregate/annotate the view based on Search Term
column and keep the latest date of each search term. The column User searches
is being updated when user puts the same term in the search bar so there is no need for me to keep all records. I just need the latest one.
I tried to update queryset using distinct()
and annotate()
in admin model but with no success.
In other words I want to have 1 unique term in the table with the latest date (Searched on
column).
Below is my code:
models.py
class SearchQueryTracker(models.Model):
id = models.AutoField(primary_key=True)
author = models.ForeignKey(User, blank=True, null=True, on_delete=models.SET_NULL, unique=False)
total_results = models.IntegerField('Search results', default=0)
total_searches = models.IntegerField('User searches', default=0)
search_term = models.CharField(max_length=1000, blank=True, null=True)
searched_on = models.DateTimeField('searched on', default=timezone.now)
views.py
@login_required
def SearchViewFBV(request):
query = request.GET.get('q')
query_list = request.GET.get('q', None).split()
query_list_count = len(query_list)
user = User.objects.get(email=request.user.email)
find_duplicate_results = SearchQueryTracker.objects.filter(search_term=query).update(total_searches=F('total_searches') + 1)
....
search_tracker = SearchQueryTracker()
search_tracker.total_searches = find_duplicate_results
search_tracker.author = user
search_tracker.search_term = query
search_tracker.save()
admin.py
class SearchQueryTrackerAdmin(ImportExportModelAdmin):
list_display = ('search_term', 'author', 'total_results', 'total_searches', 'searched_on')
readonly_fields = list_display
list_display_links = ('search_term', )
search_fields = ('search_term', )
def queryset(self, request):
qs = super(SearchQueryTrackerAdmin, self).queryset(request)
qs = qs.order_by('-searched_on',).distinct('search_term') # not working
# qs = qs.annotate(Count('searched_on')) # not working
return qs
admin.site.register(SearchQueryTracker, SearchQueryTrackerAdmin)
Any help or advice will be appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以在
searchviewfbv
上每次创建新的searchQueryTracker
,您可以使用get_or_create
方法来检索searchQueryTracker
如果它存在或否则创建。为了避免
MutteranObjectStsReturned
例外,您将需要首先清洁所有重复项的数据库。Instead of creating a new
SearchQueryTracker
each time onSearchViewFBV
, you can use theget_or_create
method to retrieve theSearchQueryTracker
if it exists, or create it otherwise.To avoid
MultipleObjectsReturned
exception you will need to clean your database of all duplicates first.