解决:Django模型类中没有CharField字段时报错 UserCourse has no field named 'comments'

摘要

  • 版本时 python3.65 django 2.1
先看问题代码片
class UserCourse(models.Model):
    '''用户课程'''
    user = models.ForeignKey(UserProfile, verbose_name="用户", on_delete=models.CASCADE)
    course = models.ForeignKey(Course, verbose_name="课程", on_delete=models.CASCADE)
    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")

    class Meta:
        verbose_name = "用户课程"
        verbose_name_plural = verbose_name
解决的代码片
class UserCourse(models.Model):
    '''用户课程'''
    user = models.ForeignKey(UserProfile, verbose_name="用户", on_delete=models.CASCADE)
    course = models.ForeignKey(Course, verbose_name="课程", on_delete=models.CASCADE)
    comments = models.CharField(default="空",max_length=50, verbose_name="描述信息")
    add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")

    class Meta:
        verbose_name = "用户课程"
        verbose_name_plural = verbose_name

  • 这里是我抽象出来的一个更加方便管理用户和课程关系的一个类,
  • 此时在后台管理该模型类的时候就会报错:UserCourse has no field named ‘comments’
  • 需要知道的是:
    1、在我添加comments 字段之前,我删除并重新生成过迁移表,也查看迁移文件内容和表结构,发现根本就没有comments字段(也就是说在数据库设计上根本就没有这个字段)。
    2、而且我之前也进行过类似的定义模型类的方式,并没有报错,所以我感觉这是django在模型类管理上的一个设计上的更新。
    3、所以我看了我所有的模型类的定义,只有这一个模型类没有CharField字段或者类似CharField字段的字段。于是报错了。
    4、然后我添加了一个没有用的comments字段,发现问题得到解决。
  • 为了佐证我的想法,我看了一下迁移文件,得到下面两个个代码片,说明我的想法是正确的(请注意field):
    operations = [
        migrations.AddField(
            model_name='usercourse',
            name='comments',
            # 请看这里
            field=models.CharField(default='空', max_length=50, verbose_name='描述信息'),
        ),
    ]
 migrations.CreateModel(
            name='UserCourse',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('add_time', models.DateTimeField(default=datetime.datetime.now, verbose_name='添加时间')),
                ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='课程')),
                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='用户')),
            ],
总结
  • 之前开发都用django1.x.x的开发,很多方面都不一样了,还是要多跟得上步伐,才能进步。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值