代码之家  ›  专栏  ›  技术社区  ›  NeoVe

过滤JSON结果-Django 1.8-Github API v3

  •  -1
  • NeoVe  · 技术社区  · 6 年前

    我正在尝试筛选模板上API查询的结果,我有以下方法:

    def profile(request):
    parsedData = []
    if request.method == 'POST':
        username = request.POST.get('user')
        req = requests.get('https://api.github.com/users/' + username + '/repos') 
        jsonList = []
        jsonList=req.json()
        for data in jsonList:
            userData = {}
            userData['html_url'] = data['html_url']
            userData['created_at'] = data['created_at']
            userData['updated_at'] = data['updated_at']
            userData['forks_count'] = data['forks_count']
            repo_instance = Repo.objects.create(name=data['html_url'],created_at=data['created_at'],updated_at=data['updated_at'],forks_count=data['forks_count'])
            repos = Repo.objects.filter(updated_at__lt = timezone.now()).order_by('updated_at')
            parsedData.append(userData)
    return render(request, 'app/profile.html', {'data': parsedData})
    

    例如,此方法将查询到如下地址 githubtraining

    还将找到的每个存储库存储到数据库中。

    现在,我想要的是,将从该查询获得的结果过滤到我的应用程序视图中,这是我在模板上的内容:

    <div class="table-responsive">
      <table class="table table-bordered table-hover table-striped tablesorter">
          <thead>
          <tr>
            <th class="header"> Url <i class="icon-sort"></i></th>
            <th class="header"> Created at <i class="icon-sort"></i></th>
            <th class="header"> Updated at <i class="icon-sort"></i></th>
            <th class="header"> Forks count <i class="icon-sort"></i></th>
          </tr>
      </thead>
      <tbody>
    
      {% for key in data %}
          <tr>
              <td>{{ key.html_url }}</td>
              <td>{{ key.created_at }}</td>
              <td>{{ key.updated_at }}</td>
              <td>{{ key.forks_count }}</td>
          </tr>
      {% endfor %}
    
      </tbody>
      </table>
    </div>
    

    如您所见,API返回带有一些JSON数据的repo,其中一项是 updated_at 。我需要的是按这些日期筛选结果查询,从最新更新到最旧更新(提交)。

    我曾尝试将它们存储到db中,然后过滤结果,但这种方式不起作用,而且,我认为这不是最佳解决方案,因此,我需要在显示结果之前“捕获”它,然后将其过滤到我的视图(html)中。

    有什么想法吗?

    你可以参考这个 question 对于API响应

    1 回复  |  直到 6 年前
        1
  •  1
  •   Walucas    6 年前

    您应该像这样(使用-)在查询集上应用order by:

    repos = Repo.objects.filter(updated_at__lt = timezone.now()).order_by('-updated_at')