Django博客模型makemigrations报models.E014错误求助
解决Django模型中
ordering字段的SystemCheckError问题 我一眼就看出问题所在啦——你写的ordering = ('-publish')其实不是元组!这是Python里一个很容易踩的语法坑:当你想定义只包含一个元素的元组时,必须在元素后面加个逗号,否则括号只会被当作表达式分组的符号,最终这个赋值结果其实是字符串'-publish',而Django的ordering要求必须是列表或元组类型,所以才会抛出models.E014错误。
正确的写法有两种:
- 带逗号的单元素元组(推荐,符合Django官方示例风格):
class Meta: ordering = ('-publish',)
- 使用列表:
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
相关产品推荐
相关产品推荐

