0

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

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

谢谢你。

例如。

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

xxxxx 2020 年 12 月 13 日 22

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

1 回答 1

0

我认为你需要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'))

.

于 2020-11-28T09:40:07.567 回答