【问题标题】:Using order_by in django based on the parameter passed in the url根据url传入的参数在django中使用order_by
【发布时间】:2020-12-04 10:13:58
【问题描述】:

我正在开发一个基本的电子商务 django 网站,在我的类别页面上,我有几个选项可以对项目进行排序。这是我的 urls.py:

path("category/<str:sort>",views.category,name="category"),

这是我的views.py:

定义类别(请求,排序):

context = {
     
    'types' : Category.objects.all(),
    'prods': Product.objects.filter().order_by(),
    'cartItems':[],
   
}    
return render(request,"category.html",context)

现在我担心的是,当用户选择对产品进行排序时,我的产品型号字段名称非常大,例如。如果用户选择按日期排序,那么我的产品模型中的日期名称是“productaddedtimedate”,并且在 url 中传递它看起来很不合适(类别/productaddedtimedate)。此外,如果他想按反向日期排序,那么传递“-productaddedtimedate”(减号)也不会很好看。那么是否有任何解决方法,比如我可以从 url 中获取参数并在 views.py 中更改它,然后再在上下文中使用它。例如,我在 url 中使用参数“date”,并在 views.py 中将其更改为 productaddedtimedate,然后在上下文中传递它。

【问题讨论】:

  • 创建查找函数。所以假设你有一个字典(my_dict ={"date":"productaddedtimedate", "price":"whatever",...}),当用户输入“日期”时你写my_dict["date"],它会返回productaddedtimedate。只需从 url 中获取参数...

标签: django


【解决方案1】:

你可以试试这个。例如,如果您想在您的 url 中设置按日期排序的日期 那么:

a=""
if parameter == "date"
    a="productaddedtimedate"

context = {
     
    'types' : Category.objects.all(),
    'prods': Product.objects.filter().order_by(a),
    'cartItems':[],
   
}    
return render(request,"category.html",context)

【讨论】:

    【解决方案2】:

    您也可以这样做。在上下文字典中添加 'date':'productaddedtimedate' 然后在您的模板中使用它。但我不确定这是否可行

    【讨论】:

      【解决方案3】:

      您可以简单地更改 models.py 文件中的字段名称。然后重新迁移它。这将是最简单的选择。

      【讨论】:

      • 是的,我已经知道了,但我有一个很大的数字。的模型,我已经在我的许多模板中使用了它们,所以我会把它作为最后的选择
      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      • 2014-09-03
      • 2012-04-22
      • 1970-01-01
      • 2017-05-08
      相关资源
      最近更新 更多