【问题标题】:django change order_by from user requestdjango 根据用户请求更改 order_by
【发布时间】:2023-03-29 00:19:01
【问题描述】:

我们正在网络浏览器上加载模型“Post”的内容,该模型按“helium”(我们的流行变量)排序。

现在,我们希望在用户单击按钮时按“pop_date”(我们的due_date 变量)对相同的内容进行排序。

是否可以在不重新加载浏览器页面的情况下立即完成?

到目前为止我们看到的选项:

  • 更改“order_by”并请求新列表(对数据库的新操作,重新上传所有媒体)
  • 使用python“排序”功能(加载的许多帖子的内存问题)

models.py

class Post(models.Model):
    pub_date = models.DateTimeField('date published',auto_now=True)
    pop_date = models.DateTimeField('Popping time', blank=False)        
    helium=models.IntegerField(default=0)
    (...)

views.py(查询)

Post.objects.filter(pop_date__gte=timezone.now()).order_by(self.ordering,'-id')

url.py

# Order by Helium       
url(r'^(?P<slug>[-\w]+)/popular$', views.IndexView.as_view(ordering='-helium'), name='index'),    

# Order by Popping time
url(r'^(?P<slug>[-\w]+)/timeline$', views.IndexView.as_view(ordering='pop_date'), name='index_now'),    

【问题讨论】:

  • “重新上传所有媒体”:不,网络浏览器足够智能,只会重新加载 HTML 内容。

标签: javascript jquery django django-models django-views


【解决方案1】:

我肯定会选择order_by。在用户单击按钮后,您不能使用sorted,您必须再次创建另一个request(您最终可以使用 JS,但这是一个全新的故事 - 您必须获取所有数据需要,这将限制您将来无法使用分页)

【讨论】:

  • 感谢 Todor 的提示,我们将根据您的建议继续前进。出于好奇,你会如何使用 JS 来解决这个问题?
  • 使用JSArray.sort。流程类似于 - on button click,从 html 中获取所有 post,然后重新排序。检查this问题,有一个示例解决方案。
猜你喜欢
  • 1970-01-01
  • 2013-05-19
  • 2012-03-07
  • 2011-09-05
  • 2014-09-03
  • 2021-08-21
  • 2016-02-03
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多