【问题标题】:How can I get list of all items with query received?如何获取收到查询的所有项目的列表?
【发布时间】:2021-02-08 08:30:48
【问题描述】:

我正在制作一个 Django 项目,其中我有包含各种项目的用户列表。每个项目都有其名称、数量和日期等属性。

这是我的项目模型:

class Item(models.Model):
    STATUS = (
        ('BOUGHT', 'BOUGHT'),
        ('NOT AVAILABLE', 'NOT AVAILABLE'),
        ('PENDING', 'PENDING'),
    )
    userlist = models.ForeignKey(userList, on_delete=models.SET_NULL, blank=True, null=True)
    item_name = models.CharField(max_length=200, null=True)
    item_quantity = models.CharField(max_length=200, null=True)
    item_status = models.CharField(max_length=200, null=True, choices=STATUS)
    date = models.DateField(null=True)

    def __str__(self):
        return self.item_name

这是我的views.py:

def listView(request):
    if request.user.is_authenticated:
        fd = None
        user_id = request.user.id
        userlist, created = userList.objects.get_or_create(user_id=user_id)
        items = userlist.item_set.all()
        if request.body:
            data = json.loads(request.body)
            fd=data['date']
    else:
        items = None

    context = {'items': items}
    return render(request, 'list_manager/index.html', context)

这里,fd 是从正文收到的查询“日期”。 默认情况下,items 包含列表中存在的所有项目。 现在我只想要具有 item.date==fd 的对象列表,我该如何实现呢?

【问题讨论】:

    标签: python django django-views


    【解决方案1】:

    您可以使用以下代码过滤数据:

    items = userlist.item_set.filter(date=request.POST.get("date"))
    

    【讨论】:

      【解决方案2】:

      你可以使用request.POST[Django-Docs]而不是使用json模块来加载请求体。如果request.POST.get("date") 不是日期时间对象而是字符串,则需要使用datetime.strptime() 将其解析为日期时间对象。

      def listView(request):
          if request.user.is_authenticated:
              fd = None
              user_id = request.user.id
              userlist, created = userList.objects.get_or_create(user_id=user_id)
              items = userlist.item_set.filter(date=request.POST.get("date"))
          else:
              items = None
      
          context = {"items": items}
          return render(request, "list_manager/index.html", context)

      【讨论】:

      • 我可以成功查询,但是页面没有显示所需的输出,因为 request.method 仍然是 POST。我该如何改变呢?
      • 为了从 HTML 表单中获取过滤的查询参数,我使用的是 POST 方法
      • 这不是这个问题的范围。也许你应该问一个新问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 2012-06-08
      相关资源
      最近更新 更多