Django模型Meta类ordering配置报错:需为元组或列表(单字段也需)
Django模型Meta类ordering配置错误修复
问题根源
你遇到的报错是因为ordering的值被解析为字符串,而非Django要求的元组或列表。如果你的代码里ordering = ('-publishDate')(末尾漏掉了逗号),Python会把括号视为优先级符号,最终ordering实际是一个字符串,触发了报错:
'ordering' must be a tuple or list (even if you want to order by only one field).
另外你的DateTimeField配置存在冗余:max_length参数仅适用于字符串类字段(如CharField),DateTimeField不需要这个参数,应该删除。
修正后的完整代码
from django.db import models from django.utils import timezone class Product(models.Model): publishDate = models.DateTimeField(default=timezone.now, verbose_name='发布时间') views = models.PositiveIntegerField(verbose_name='浏览量', default=0) class Meta: verbose_name = '产品' verbose_name_plural = '产品' # 写法1:带尾逗号的元组(推荐) ordering = ('-publishDate',) # 写法2:列表格式(也符合要求) # ordering = ['-publishDate']
核心注意事项
- 单字段排序时,
ordering必须是带尾逗号的元组或列表,不能是单个字符串。 - 移除
DateTimeField的max_length参数,避免不必要的配置警告。
内容的提问来源于stack exchange,提问作者o'o'o
相关产品推荐
相关产品推荐

