python - 按日期订购帖子
问题描述
我已经创建了一个帖子列表,现在我想按发布日期排序这个列表。如果我在视图中使用order_by(-post_publishing_date),shell 会显示此错误:
NameError:未定义名称“post_publishing_date”
模型.py
class PostModel(models.Model):
post_title = models.CharField(max_length=70)
post_short_description = models.TextField(max_length=200)
post_contents = models.TextField()
post_publishing_date = models.DateTimeField(auto_now=False, auto_now_add=True)
post_author = models.ForeignKey(AuthorModel, on_delete=models.CASCADE, related_name="connected_author")
post_keyconcept = models.ManyToManyField(KeyConceptModel, related_name="connected_keyconcept")
slug = models.SlugField(verbose_name="Slug", unique="True")
post_highlighted = models.BooleanField(default=False)
def __str__(self):
return self.post_title
def get_absolute_url(self):
return reverse("singlepostManuscriptusView", kwargs={"slug": self.slug})
class Meta:
verbose_name = "Articolo"
verbose_name_plural = "Articoli"
视图.py
class SinglePostGDV(DetailView):
model = PostModel
template_name = "manuscriptus_post_detail.html"
class ListPostGDV(ListView):
model = PostModel
template_name = "manuscriptus_home.html"
queryset = PostModel.objects.filter().order_by(-post_publishing_date)
网址.py
urlpatterns = [
path("it/blog/", ListPostGDV.as_view(), name="homeManuscriptusView"),
path("it/blog/<slug:slug>/", SinglePostGDV.as_view(), name="singlepostManuscriptusView"),
]
我做错了什么?
解决方案
临时订购
好吧,Python 是正确的。没有identifier post_publishing_date
,您通过string传递列的名称,因此:
class ListPostGDV(ListView):
model = PostModel
template_name = "manuscriptus_home.html"
queryset = PostModel.objects.filter().order_by('-post_publishing_date')
定义模型的固有顺序
请注意,您还可以在Meta
类中为模型提供“固有”排序:
class PostModel(models.Model):
post_title = models.CharField(max_length=70)
post_short_description = models.TextField(max_length=200)
post_contents = models.TextField()
post_publishing_date = models.DateTimeField(auto_now=False, auto_now_add=True)
post_author = models.ForeignKey(AuthorModel, on_delete=models.CASCADE, related_name="connected_author")
post_keyconcept = models.ManyToManyField(KeyConceptModel, related_name="connected_keyconcept")
slug = models.SlugField(verbose_name="Slug", unique="True")
post_highlighted = models.BooleanField(default=False)
def __str__(self):
return self.post_title
def get_absolute_url(self):
return reverse("singlepostManuscriptusView", kwargs={"slug": self.slug})
class Meta:
ordering = ['-post_publishing_date']
verbose_name = "Articolo"
verbose_name_plural = "Articoli"
如果您这样做,则对该模型的所有查询都将隐式按-post_publishing_date
. 因此,这意味着您不能“忘记”正确排序对象。
因此,您不必在视图中订购它。当然,您只能定义一种这样的“固有”顺序,并且不清楚您是否要在此处使用一种。
推荐阅读
- node.js - 使用 mocha 和 chai 在单元测试用例中控制自动返回和最后一行不执行
- python - 在视频而不是静止图像上应用精明边缘检测器的方法
- c# - 如何从 ListView 中的 GridView 中检索所选行的所有列中的文本?
- python - 如何使用键盘检测来控制无人机?
- python - tqdm显示的“速度”是瞬时速度还是平均速度?
- python - 有没有办法只显示仅检测到对象边界框的视频中的帧
- python - Python,异步,代码完成后出现奇怪错误:事件循环已关闭进程完成,退出代码为 0
- asp.net-core - ASP.NET Core 3.1 + OData + EF Core 多对多扩展问题
- reactjs - 如何使用 KeyboardDateTimePicker 防止过去一个小时
- nestjs - 添加另一个模块破坏了nestjs应用程序