参考资料:虫师-《web接口开发与自动化测试:基于python语言》

日常学习Django框架中,创建了用户模型,但是页面功能验证时候,提示不能进行列表字段操作,debug好久,才找到问题原因,心累。。。

下面是大概过程和解决方案。。。

models.py文件代码:

 from django.db import models

 # Create your models here.
# 发布会表
class Event(models.Model):
name = models.CharField(max_length=100) # 发布会标题
limit = models.IntegerField() # 参加人数
status = models.BooleanField() # 状态
address = models.CharField(max_length=200) # 地址
start_time = models.DateTimeField('event time') # 发布会时间
create_time = models.DateTimeField(auto_now=True) # 创建时间(自动获取当前时间) def __str__(self):
return self.name # 嘉宾表
class Guest(models.Model):
event = models.ForeignKey('Event','on_delete=models.CASCADE,') # 关联发布会
realname = models.CharField(max_length=64) # 姓名
phone = models.CharField(max_length=16) # 手机号
email = models.EmailField() # 邮箱
sign = models.BooleanField() # 签到状态
create_time = models.DateTimeField(auto_now=True) # 创建时间(自动获取当前时间) class Meta:
unique_together = ("event", "phone") def __str__(self):
return self.realname

代码解析:

①、创建发布会表(Event类)和嘉宾表(Guest类);

②、两个表中默认生成自增ID,但不需要声明;

③、嘉宾表中中通过event字段(字段名event_id)关联发布会ID,ForeignKey()用来创建外键;

④、用发布会ID和手机号作为联合主键,Meta是Django模型类的一个内部类,用于定义行为特性,unique_together用于设置两个字段为联合主键(event和phone);

命令行执行数据迁移操作:

然后在进入后台管理界面,选择Guests,点击添加,然后保存;

神奇的事情来了,提示如下:

ERRORS:

<class 'sign.admin.GuestAdmin'>: (admin.E108) The value of 'list_display[4]'

检查了很多次代码,在Stack Overflow也找到了类似的问题,最后从头检查代码,才发现是models文件第23行创建时间的代码没有缩进,执行数据迁移时数据库没有对应字段导致的报错。

对应的数据迁移文件代码如下

 # Generated by Django 2.0 on 2018-03-05 13:03

 from django.db import migrations, models

 class Migration(migrations.Migration):

     initial = True

     dependencies = [
] operations = [
migrations.CreateModel(
name='Event',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
('limit', models.IntegerField()),
('status', models.BooleanField()),
('address', models.CharField(max_length=200)),
('start_time', models.DateTimeField(verbose_name='event time')),
('create_time', models.DateTimeField(auto_now=True)),
],
),
migrations.CreateModel(
name='Guest',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('realname', models.CharField(max_length=64)),
('phone', models.CharField(max_length=16)),
('email', models.EmailField(max_length=254)),
('sign', models.BooleanField()),
('event', models.ForeignKey(on_delete='on_delete=models.CASCADE,', to='sign.Event')),
],
),
]

问题的原因是啥捏,我是照着书里面的代码撸的,写的时候也没注意到有一行代码没有缩进,然后导致了没有对应字段,然后保存报错!!!

只想说,对python这种语言来说,缩进格式真的很重要!!!

还有,之前看虫师的selenium自动化那本书的时候,就有很多代码有编写错误,这次又遇到了,不知道说啥了,心好累。。。

最后的解决方案如下:

修改models文件,缩进保持一致,然后重新执行数据迁移操作,由于上次建表少create_time字段,这次执行数据迁移,只是执行了一个更新操作,并未对已有的表字段进行修改。

Django里面,这种操作不是覆盖式的,而是通过新增来解决,对应的迁移文件如下:

 # Generated by Django 2.0 on 2018-03-05 14:30

 from django.db import migrations, models

 class Migration(migrations.Migration):

     dependencies = [
('sign', '0001_initial'),
] operations = [
migrations.AddField(
model_name='guest',
name='create_time',
field=models.DateTimeField(auto_now=True),
),
]

最后,重启服务,在界面进行功能验证,发布会下新增宾客,就可以成功保存了。。。

附:django-API文档

PS:收获的教训:

学习过程中,犯错并不可怕,前人的代码,不一定在你的环境完全可编译执行,遇到问题,耐心排查,每次解决问题的过程,就是提高的过程!

(admin.E108) The value of 'list_display[4]'报错解决方案的更多相关文章

  1. RabbitMQ>Erlang machine stopped instantly (distribution name conflict?). The service is not restarted as OnFail is set to ignore.-报错解决方案 原来是NNND。。。

    >Erlang machine stopped instantly (distribution name conflict?). The service is not restarted as ...

  2. Updates were rejected because the remote contains work that you do(git报错解决方案)

    Updates were rejected because the remote contains work that you do(git报错解决方案) 今天向GitHub远程仓库提交本地项目文件时 ...

  3. JMeter 报告监听器导入.jtl结果文件报错解决方案

    JMeter 报告监听器导入.jtl结果文件报错解决方案   by:授客 QQ:1033553122   1. 问题描述 把jmeter压测时生成的 .jtl结果文件导入监听器报告中,弹出如下错误提示 ...

  4. Python3.x:import urllib2报错解决方案

    Python:import urllib2报错解决方案 python2和3有些不一样: python2:输出为print 'hello world' python3:输出为print('hello w ...

  5. php 500报错解决方案

    php 500报错解决方案 1 先看nginx error.log 指定的错误日记文件路径 找到这个日记文件看 里面信息 2 再看 php-fpm.conf 里面指定的PHP错误日记的路径 具体如下& ...

  6. mysql主从复制报错解决方案

    mysql主从复制报错解决方案 我先制造个错误 在slave删除个info3字段 然后在master 在info3插入数据 报错如下<pre> Last_SQL_Errno: 1054 L ...

  7. 转:CentOS上安装LAMP之第三步:MySQL环境及安装过程报错解决方案(纯净系统环境)

    这是AMP运行环境中最后配置的环境: 惯例传送门: 1.编译安装MySQL cd /home/zhangatle/tar tar zxvf mysql-.tar.gz cd mysql- cmake ...

  8. Eclipse开发Android项目报错解决方案详细教程,最新版一篇就够了!

    本文记录刚接触Android开发搭建环境后新建工程各种可能的报错,并亲身经历漫长的解决过程(╥╯^╰╥),寻找各种偏方,避免大家采坑,希望能帮助到大家. 报错信息 出错一:The import and ...

  9. 【笔记】springCloud--Alibaba--nacos介绍----启动报错解决方案

    Nacos介绍 · 欢迎来到 Nacos 的世界! · Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管 ...

随机推荐

  1. 在“非软件企业”开发软件的困局 ZT

    软件产品广泛服务于各行业,其开发具有高科技.高投入.高产出.高风险的特点.在项目开发和软件应用中,只有将人员能力的发挥与科学技术的使用应用市场的认识进行最佳的融合,才能发挥软件的效益.普通企业虽涉足软 ...

  2. Python高级特性:迭代

    迭代的目的是实现遍历出一个可迭代对象的元素,即for循环 基本语法 : for ... in ... 首先只有可迭代对象才可以迭代,判断一个对象是不是可以迭代的方法如下: >>> f ...

  3. 2014/08/31 Zushi

    今天是逗子森户海滨浴场开放的最后一天,趁着最后的光景来这里透透气. 在学皮划艇准备下海的人们,貌似还挺有趣. 来自云端的上帝之手. 谁愿意和我一起向着夕阳弄桨. 夕阳西下,那里是家乡的方向. 灯塔和神 ...

  4. Java map 详解

    Map 提供了一个更通用的元素存储方法.Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值. 初始化一个集合:  Map<String, String> map = ...

  5. C#-循环语句(六)

    for循环 格式: for(表达式1;循环条件;表达式2) { 循环体; } 解释:先执行表达式1,再判断循环条件是否为真,如果为真则执行循环体,执行完成后再执行表达式2 再次判断循环条件,由此一直反 ...

  6. c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法

    c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法 图的最短路径的概念: 一位旅客要从城市A到城市B,他希望选择一条途中中转次数最少的路线.假设途中每一站都需要换车,则这个问题反映到图上就是 ...

  7. shell的case用法

    今天给大家简单介绍一下结构条件语句的用法,实际上就是规范的多分支if语句,如下: case语法: case "字符串变量" in 值1)指令1... ;; 值2)指令2... ;; ...

  8. 使用netstat命名排查网络问题的参考指引

    原文链接:http://www.lookdaima.com/WebForms/WebPages/Blanks/Pm/Docs/DocItemDetail.aspx?id=69b487d0-8bf4-4 ...

  9. C# json、xml序列化

    json序列化: public static string SerializeJson<T>(T json) { // 1. 需要添加引用 Newtonsoft.Json.dll,默认为 ...

  10. php获取ip地址所在的地理位置的实现

    1,通过腾讯或者新浪提供的接口来获取(新浪和腾讯类似) <?php     function getIPLocation($queryIP){      $url = 'http://ip.qq ...