(Django)由desc命令

时间:2017-08-09 11:40:08

标签: python django

我无法订购我的新闻表。我想我做的一切都正确,但是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')**

2 个答案:

答案 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']