Django:如何使用 ListView 将最后添加日期添加到查询集中
Django: How to add the last added date to a query set using ListView
我不知道如何创建查询集,以便为 RedirectURL
[=47] 中的每个 URL 选择最后一个 URLusage
table 条目=] dateaccessed
字段并将其附加到查询结果,类似于我对 num_links
字段所做的。
最终结果是我显示了重定向URL 的列表,其中包含 URLusage
table.
中的使用计数和上次使用日期
谢谢。
例如
Link---上次使用---总使用
xxxxx 2020 年 12 月 13 日 22
yyyyy 2020 年 1 月 14 日 2
型号
class RedirectURL(models.Model):
userid = models.PositiveBigIntegerField(null=True, default=1)
srcurl = models.CharField(max_length=50, null=True, unique=True)
active = models.BooleanField(null=True, default=False)
class URLusage(models.Model):
redirectid = models.ForeignKey(RedirectURL, on_delete=models.CASCADE)
dateaccessed = models.DateTimeField(auto_now_add=True, null=True)
查看
class LinksList(LoginRequiredMixin, ListView):
login_url = "home"
redirect_field_name = None
login_required = True
context_object_name = 'links'
paginate_by = 30
template_name = 'yourlinks.html'
paginate_orphans = 1
def get_queryset(self):
return RedirectURL.objects.filter(userid=self.request.user.id, active=True).annotate(num_links=Count('urlusage')).order_by('-id')
def get_context_data(self,*args, **kwargs):
try:
return super(LinksList,self).get_context_data(*args, **kwargs)
except Http404:
self.kwargs['page'] = 1
return super(LinksList,self).get_context_data(*args, **kwargs)
模板
{% for i in links %}
<div class="row">
<div class="col-sm">
{{ i.srcurl }}
</div>
<div class="col-sm">
{{ i.last_dateaccessed }}
</div>
<div class="col-sm">
{{ i.num_links }}
</div>
</div>
{% endfor %}
我想你需要这样的 queryset
:
from django.db.models import Max, Count
qs = RedirectURL.objects.annotate(last_used=Max('urlusage__dateaccessed'), total_used=Count('urlusage'))
这将按 redirect_id
和 returns 您想要的结果对您的网址进行分组。
然后您可以遍历 qs
并显示您的数据:
for rec in qs:
print(rec.srcurl, rec.last_used, rec.total_used)
或者您可以将 qs
传递给模板上下文,然后在相关模板中使用此数据。
注意:您也可以根据您的要求过滤此 queryset
。例如基于用户过滤:
qs = RedirectURL.objects.filter(user=some_user).annotate(last_used=Max('urlusage__dateaccessed'), total_used=Count('urlusage'))
.
我不知道如何创建查询集,以便为 RedirectURL
[=47] 中的每个 URL 选择最后一个 URLusage
table 条目=] dateaccessed
字段并将其附加到查询结果,类似于我对 num_links
字段所做的。
最终结果是我显示了重定向URL 的列表,其中包含 URLusage
table.
谢谢。
例如
Link---上次使用---总使用
xxxxx 2020 年 12 月 13 日 22
yyyyy 2020 年 1 月 14 日 2
型号
class RedirectURL(models.Model):
userid = models.PositiveBigIntegerField(null=True, default=1)
srcurl = models.CharField(max_length=50, null=True, unique=True)
active = models.BooleanField(null=True, default=False)
class URLusage(models.Model):
redirectid = models.ForeignKey(RedirectURL, on_delete=models.CASCADE)
dateaccessed = models.DateTimeField(auto_now_add=True, null=True)
查看
class LinksList(LoginRequiredMixin, ListView):
login_url = "home"
redirect_field_name = None
login_required = True
context_object_name = 'links'
paginate_by = 30
template_name = 'yourlinks.html'
paginate_orphans = 1
def get_queryset(self):
return RedirectURL.objects.filter(userid=self.request.user.id, active=True).annotate(num_links=Count('urlusage')).order_by('-id')
def get_context_data(self,*args, **kwargs):
try:
return super(LinksList,self).get_context_data(*args, **kwargs)
except Http404:
self.kwargs['page'] = 1
return super(LinksList,self).get_context_data(*args, **kwargs)
模板
{% for i in links %}
<div class="row">
<div class="col-sm">
{{ i.srcurl }}
</div>
<div class="col-sm">
{{ i.last_dateaccessed }}
</div>
<div class="col-sm">
{{ i.num_links }}
</div>
</div>
{% endfor %}
我想你需要这样的 queryset
:
from django.db.models import Max, Count
qs = RedirectURL.objects.annotate(last_used=Max('urlusage__dateaccessed'), total_used=Count('urlusage'))
这将按 redirect_id
和 returns 您想要的结果对您的网址进行分组。
然后您可以遍历 qs
并显示您的数据:
for rec in qs:
print(rec.srcurl, rec.last_used, rec.total_used)
或者您可以将 qs
传递给模板上下文,然后在相关模板中使用此数据。
注意:您也可以根据您的要求过滤此 queryset
。例如基于用户过滤:
qs = RedirectURL.objects.filter(user=some_user).annotate(last_used=Max('urlusage__dateaccessed'), total_used=Count('urlusage'))
.