【问题标题】:Django: How to add the last added date to a query set using ListViewDjango:如何使用 ListView 将最后添加的日期添加到查询集中
【发布时间】:2020-11-28 07:09:37
【问题描述】:

我不知道如何创建查询集,以便为 RedirectURLdateaccessed 字段中的每个 URL 拾取最后一个 URLusage 表条目,并将其附加到类似于我所做的查询结果中num_links 字段。

最终结果是我显示了一个 RedirectURL 列表,其中包含 URLusage 表中的使用次数和上次使用日期。

谢谢。

例如。

链接---上次使用---总使用次数

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 %}

【问题讨论】:

    标签: django django-queryset django-3.1


    【解决方案1】:

    我认为您需要这样的queryset

    from django.db.models import Max, Count
    
    qs = RedirectURL.objects.annotate(last_used=Max('urlusage__dateaccessed'), total_used=Count('urlusage'))
    

    它将按redirect_id 对您的网址进行分组并返回您想要的结果。 然后您可以遍历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'))
    

    .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-19
      • 2018-03-10
      • 2022-11-12
      • 1970-01-01
      • 1970-01-01
      • 2015-06-17
      • 2012-11-27
      相关资源
      最近更新 更多