我无法订购我的新闻表。我想我做的一切都正确,但是django给我看错了!请检查我的代码可能出错了
class News(models.Model):
news_title = models.CharField(max_length=255)
news_text = models.TextField(max_length=1000)
news_logo = models.ImageField(upload_to='uimages')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
verbose_name = 'News'
verbose_name_plural = 'News'
**News.objects.filter().order_by('-created_at')**
答案 0 :(得分:2)
您的代码中存在一些缩进问题,或者至少在您发布的示例中存在问题。剪切的代码应缩进如下:
class News(models.Model):
news_title = models.CharField(max_length=255)
news_text = models.TextField(max_length=1000)
news_logo = models.ImageField(upload_to='uimages')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
verbose_name = 'News'
verbose_name_plural = 'News'
具体来说,Meta
类需要成为News
类的一部分。
在更改默认排序方面,如在已经指出的一些注释中,正确的方法是使用ordering
类中的Meta
属性。如果您始终希望按降序排列created_at
,则需要按以下方式定义类:
class News(models.Model):
news_title = models.CharField(max_length=255)
news_text = models.TextField(max_length=1000)
news_logo = models.ImageField(upload_to='uimages')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
verbose_name = 'News'
verbose_name_plural = 'News'
ordering = ['-created_at']
您可以在Django documentation中找到有关模型选项的更多信息。
答案 1 :(得分:1)
为什么要将该查询放在Meta类中?听起来你想要达到default order as shown in this Django doc。在这种情况下,您不要在那里放置查询,只需设置订单属性:
class Meta:
verbose_name = 'News'
verbose_name_plural = 'News'
# this line:
ordering = ['-created_at']