1. 为什么要在INSTALLED_APPS中加入crispy_forms

    • 因为django-crispy-forms 是对django formhtml页面呈现方式进行管理的一个第三方插件。
  2. 为什么有时候定义model时,会将外键设置成指向自己?

    • 比如有这种需求,一个商品类目(GoodsCategory)的Model,它有一个字段是父级目录(parent_category),父级目录应该是一个外键并引用GoodsCategory, 即

      class GoodsCategory(models.Model):
      """
      some other filed
      """
      parent_category = models.ForeignKey(GoodsCategory)

      显然,这样会报错,因为定义parent_category的时候,GoodsCategory还没有定义,不过不用担心,django已经有了解决措施,只需要在定义时将ForeignKey所引用的Model改为‘self’即可,即

      class GoodsCategory(models.Model):
      """
      some other filed
      """
      parent_category = models.ForeignKey("self")

      这样在同步models至数据库时就会生成一个引用自己的外键

      本答案参考这篇文章Django Model的外键自关联‘self’和设置‘unique_together’

  3. python class嵌套怎么访问父类?

    • 例如:

      class parent:
      def __init__(self):
      self.name = 'parent' def getName(self):
      print(self.name) class child:
      def getName(self):
      #如何访问父类的name值 if __name__ == '__main__':
      child = parent.child()
      child.getName()
    • 答:由于parent.name在parent实例化之前不存在,所以child没办法访问到parent.name,有两种办法:

      ## 方法一:
      
      class parent:
      name = 'parent' def getName(self):
      print(self.name)
      class child:
      def getName(self):
      return parent.name if __name__ == "__main__":
      child = parent.child()
      child.getName() ## 方法二: class parent:
      def __init__(self):
      self.name = 'parent' def getName(self):
      print(self.name) class child:
      def __init__(self.parent):
      self.parent = parent def getName(self):
      return self.parent.name if __name_- == '__main__':
      parent = parent()
      child = parent.child(parent)
      child.getName()
  4. 为什么在创建model类时要嵌套一个meta类?

    • 第一个就是在商品类目里面设置了一个verbose_name=‘商品类别’,verbose_name_plural = verbose_name

      • 其实第一个等号的意思,就是给你的模型类起一个更可读的名字,在这里就是给GoodsCategory起一个名字叫 商品类别;
      • 第二个等号的意思是把 verbose_name指定为复数形式,如果不指定,则Django会自动在模型名称后面加上一个‘s’
      • 其实就是为了干预数据库建表名等操作,因为数据库中生成的表名称是 app名称 + 下划线 + 类名 ,有可能与数据库中的真正表名不一样,就会出现找不到表名的错误。

    注意:关于设置字段时的一些值的含义

    • IntegerFiled不需要设置最大长度的,否则会抛一个警告

    • help_text表示的是帮助文档

    • 外键约束中,on_delete = models.CASCADE,表示被外键约束的表,那么主表每个字段删除,相应受牵连的表的字段也会被删除

    • related_name = $$ 这个设置的是在一对多查询,进行反向查询时采用的语法结构,举个例子:

      我先定义两个模型,一个是作者,一个是作者出版的书籍,算是一对多的类型。
      
      class Person(models.Model):
      name = models.CharField(verbose_name='作者姓名',max_length=10)
      age = models.IntegerField(verbose_name='作者年龄') class Book(models.Model):
      person = models.ForeignKey(Person, related_name='person_book')
      title = models.CharField(verbose_name='书籍名称', max_length=10)
      pubtime = models.DateField(verbose_name='出版时间') ## 我们有一个需求,就是想查询一个作者出版了哪些书籍 #有两种方式可以实现
      '''
      方式一:
      先查询到作者的信息
      person = Person.objects.fiter(你的条件)
      返回一个person对象
      接下来就查询person关联的所有书籍对象,可以使用基于对象的查询方式,反向查询按照表名
      book = person.book_set.all()
      django 默认每个主表的对象都有一个是外键的属性,可以通过它来查询到所有属于主表的子表的信息。
      这个属性的名称默认是以子表的名称小写加上_set()来表示,默认返回的是一个querydict对象,你可以继续的根据情况来查询等操作。 方式二:
      上述可能比较麻烦
      可以在定义主表的外键的时候,给这个外键定义好一个名称。要用related_name比如在Book表中:
      person = models.ForeignKey(
      Person,related_name='person_books')
      那么实现上面的需求,可以使用person.book_set.all()
      也可以使用person.person_books.all()
      '''

等会整理:

[python-django 模型model字段类型说明]

models字段含义与用法

django模型内部类meta详解

生鲜超市项目错误及解决办法(crispy_forms、外键指向自己、class嵌套访问父类、meta类及各种字段参数)的更多相关文章

  1. 生鲜超市项目错误及解决办法(安装mysqlclient)

    错误1:安装Mysqlclient D:\Mxshop>pip install mysqlclient- 1.4.4-cp27-cp27m-win32 报错: ERROR: Could not ...

  2. VS2010出现FileTracker : error FTK1011编译错误的解决办法

    VS2010出现FileTracker : error FTK1011不知道是不是vs2010的一个bug,反正有人提交了. FileTracker : error FTK1011编译错误的解决办法有 ...

  3. java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法

    java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法 (2011-05-05 16:08:05) 转载▼ ...

  4. 【技术贴】解决myeclipse SVN 提交代码 commit:remains in tree-conflict错误的解决办法

    [技术贴]解决myeclipse SVN 提交代码 commit:remains in tree-conflict错误的解决办法 错误是:Aborting commit: xxxxx’ remains ...

  5. tensorflow_mnist数据集一直加载错误的解决办法

    tensorflow数据集一直加载错误的解决办法: from tensorflow.examples.tutorials.mnist import input_data mnist = input_d ...

  6. 小账本APP——软件项目风险管理及解决办法案例

    小账本APP——软件项目风险管理及解决办法案例 摘要 软件项目风险是指在软件开发过程中遇到的预算和进度等方面的问题以及这些问题对软件项目的影响.软件项目风险会影响项目计划的实现,如果项目风险变成现实, ...

  7. github常见操作和常见错误及其解决办法

    一.常见操作 1. 使用git在本地创建一个项目的过程 $ makdir ~/hello-world //创建一个项目hello-world $ cd ~/hello-world //打开这个项目 $ ...

  8. Eclipse 报 "The builder launch configuration could not be found" 错误的解决办法

    http://blog.csdn.net/defonds/article/details/26340561 Eclipse 忽然报 "The builder launch configura ...

  9. 问题:Custom tool error: Failed to generate code for the service reference 'AppVot;结果:添加Service Reference, 无法为服务生成代码错误的解决办法

    添加Service Reference, 无法为服务生成代码错误的解决办法 我的解决方案是Silverlight+WCF的应用,Done Cretiria定义了需要在做完Service端的代码后首先运 ...

随机推荐

  1. windows下 go vscode编译运行方法

    1:直接在终端运行go run命令编译 2.安装code runner插件,根据箭头标示顺序,可以在右侧看到它支持的语言.

  2. CF1195E OpenStreetMap

    题目链接 题意 有一个\(n\times m\)的矩阵,询问其中所有大小为\(a \times b\)的子矩阵的最小值之和. \(1\le n,m \le 3000\) 思路 因为是子矩阵的大小是固定 ...

  3. 【CF464E】The Classic Problem(主席树+最短路)

    点此看题面 大致题意: 给你一张无向图,每条边的边权为\(2^{x_i}\),求\(s\)到\(t\)的最短路. 最短路 最短路,首先考虑\(Dijkstra\).这里用\(SPFA\)似乎不太好,因 ...

  4. python实现异步调用函数执行

    在实现异步调用之前我们先进行什么是同步调用和异步调用 同步:是指完成事务的逻辑,先执行第一个事务,如果阻塞了,会一直等待,直到这个事务完成,再执行第二个事务,顺序执行 异步:是和同步相对的,异步是指在 ...

  5. MySQL实战45讲学习笔记:第四十四讲

    一.引子 这是我们专栏的最后一篇答疑文章,今天我们来说说一些好问题. 在我看来,能够帮我们扩展一个逻辑的边界的问题,就是好问题.因为通过解决这样的问题,能够加深我们对这个逻辑的理解,或者帮我们关联到另 ...

  6. Paper | FFDNet: Toward a Fast and Flexible Solution for CNN based Image Denoising

    目录 故事背景 核心思想 FFDNet 网络设置 噪声水平图 对子图像的去噪 保证噪声水平图的有效性 如何盲处理 为啥不用短连接 裁剪像素范围 实验 关于噪声水平图的敏感性 盲处理 发表在2018 T ...

  7. spring cloud hystrix dashboard 没有/actuator/hystrix.stream路径解决

    首先我用的是spring boot Greenwich.SR2 在测试hystrix-dashboard监控服务时,发现访问localhost:9001/actuator/hystrix.stream ...

  8. Redis的Sorted-Sets排行榜功能实现

    Redis的ZSet排行榜功能实现 1. 功能需求 类似给用户n张图片, 用户左滑不喜欢右滑喜欢.所以每个用户就会有一些喜欢的图片集合和不喜欢的图片集合.现在我们要做一个将按照一个算法将喜欢的排到前面 ...

  9. app版本升级的测试点

    移动端版本更新升级是一个比较重要的功能点,主要分为强制更新和非强制更新. 1.强制更新需要测试的点有: 1)强制升级是否可以升级成功 从老版本的包升级到新版版的包是否可以升级成功. 2)升级后的数据是 ...

  10. jquery改变表单某个输入框的值时,另一个或几个输入框的值同步变化,这里演示的是改变数量时价格同步变化

    效果如下,当我输入数量时,下面的价格同步变化 代码如下: 上图圈起来的事件是当input 框里面的值改变时触发的事件. 补图