You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django博客模型makemigrations报models.E014错误求助

解决Django模型中ordering字段的SystemCheckError问题

我一眼就看出问题所在啦——你写的ordering = ('-publish')其实不是元组!这是Python里一个很容易踩的语法坑:当你想定义只包含一个元素的元组时,必须在元素后面加个逗号,否则括号只会被当作表达式分组的符号,最终这个赋值结果其实是字符串'-publish',而Django的ordering要求必须是列表或元组类型,所以才会抛出models.E014错误。

正确的写法有两种:

  1. 带逗号的单元素元组(推荐,符合Django官方示例风格):
class Meta:
    ordering = ('-publish',)
  1. 使用列表:
class Meta:
    ordering = ['-publish']

修改后的完整models.py代码:

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User

class Post(models.Model):
    STATUS_CHOICES = (
        ('draft','Draft'),
        ('published','Published')
    )
    title = models.CharField(max_length=250)
    slug = models.SlugField(max_length=250,unique_for_date='publish')
    author = models.ForeignKey(User,on_delete=models.CASCADE,related_name='blog_posts')
    body = models.TextField()
    publish = models.DateTimeField(default=timezone.now)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    status = models.CharField(max_length=10,choices=STATUS_CHOICES,default='draft')

    class Meta:
        # 这里加了逗号,变成真正的元组
        ordering = ('-publish',)

    def __str__(self):
        return self.title

改完之后再重新运行python manage.py makemigrations blog,这个错误应该就消失啦~

内容的提问来源于stack exchange,提问作者Samyak Jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 18:32:30