生鲜超市项目错误及解决办法(crispy_forms、外键指向自己、class嵌套访问父类、meta类及各种字段参数)
为什么要在
INSTALLED_APPS
中加入crispy_forms
?- 因为
django-crispy-forms
是对django form
在html
页面呈现方式进行管理的一个第三方插件。
- 因为
为什么有时候定义
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至数据库时就会生成一个引用自己的外键
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()
为什么在创建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()
'''
- 第一个就是在商品类目里面设置了一个verbose_name=‘商品类别’,verbose_name_plural = verbose_name
等会整理:
生鲜超市项目错误及解决办法(crispy_forms、外键指向自己、class嵌套访问父类、meta类及各种字段参数)的更多相关文章
- 生鲜超市项目错误及解决办法(安装mysqlclient)
错误1:安装Mysqlclient D:\Mxshop>pip install mysqlclient- 1.4.4-cp27-cp27m-win32 报错: ERROR: Could not ...
- VS2010出现FileTracker : error FTK1011编译错误的解决办法
VS2010出现FileTracker : error FTK1011不知道是不是vs2010的一个bug,反正有人提交了. FileTracker : error FTK1011编译错误的解决办法有 ...
- java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法 (2011-05-05 16:08:05) 转载▼ ...
- 【技术贴】解决myeclipse SVN 提交代码 commit:remains in tree-conflict错误的解决办法
[技术贴]解决myeclipse SVN 提交代码 commit:remains in tree-conflict错误的解决办法 错误是:Aborting commit: xxxxx’ remains ...
- tensorflow_mnist数据集一直加载错误的解决办法
tensorflow数据集一直加载错误的解决办法: from tensorflow.examples.tutorials.mnist import input_data mnist = input_d ...
- 小账本APP——软件项目风险管理及解决办法案例
小账本APP——软件项目风险管理及解决办法案例 摘要 软件项目风险是指在软件开发过程中遇到的预算和进度等方面的问题以及这些问题对软件项目的影响.软件项目风险会影响项目计划的实现,如果项目风险变成现实, ...
- github常见操作和常见错误及其解决办法
一.常见操作 1. 使用git在本地创建一个项目的过程 $ makdir ~/hello-world //创建一个项目hello-world $ cd ~/hello-world //打开这个项目 $ ...
- Eclipse 报 "The builder launch configuration could not be found" 错误的解决办法
http://blog.csdn.net/defonds/article/details/26340561 Eclipse 忽然报 "The builder launch configura ...
- 问题:Custom tool error: Failed to generate code for the service reference 'AppVot;结果:添加Service Reference, 无法为服务生成代码错误的解决办法
添加Service Reference, 无法为服务生成代码错误的解决办法 我的解决方案是Silverlight+WCF的应用,Done Cretiria定义了需要在做完Service端的代码后首先运 ...
随机推荐
- 设计模式-单例模式(Singleton) (创建型模式)
//以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //Singleton.h #pragma once #include<iostream> class Sin ...
- MyEclipse清除所有断点的方法
今天调试网站时遇到点奇怪的问题,于是在宠大的代码段里加了N处断点,但从其它项目代码段链接代码加入断点后,关闭标签再次打开时发现断点看不到了,但运行到那段代码时依然会被中断.没有断点标记,不能手动取消怎 ...
- springboot+shrio简易登录登出和用户权限认证。
源码:https://github.com/huangshengz/myJavaDemo本例子参考:https://www.cnblogs.com/HowieYuan/p/9259638.html 本 ...
- 强大的性能监测工具dstat
强大的性能监测工具dstat 本节分为以下几个部分: dstat介绍: dstat命令是一个用来替换vmstat.iostat.netstat.nfsstat和ifstat这些命令的工具,是一个全能系 ...
- VBA基础 - 数据类型
概要 学习一种新语言, 数据类型和关键字是第一步. 数据类型 常用的数据类型如下: 类型 存储空间 范围 Boolean 2 bytes True 或者 False Byte 1 byte 0 ~ 2 ...
- vue前端post请求之坑
最近用的vue请求数据,坑死,还是对前端vue框架不熟. 与后端通信有问题,要么是json加入到url有问题.要么是json解析有问题. 解决方法: 1.请求参数一个用url传 var json=[{ ...
- java架构之路-(tomcat网络模型)简单聊聊tomcat(二)
上节课我们说到的Tomcat,并且给予了一般的tomcat配置,和配置的作用,提到了HTTP/1.1 也就是我们的网络通讯模型,那么HTTP/1.1又代表什么呢.我们来简答看一下. tomcat有四种 ...
- UWP 推荐 - 限时免费的RSS阅读器《RSS 追踪》登录 Windows 10
文/云之幻 前不久,博客作者 Bravo Yeung 写了一篇还算略受欢迎的关于 RSS 的文章 .Net开发者必知的技术类RSS订阅指南. RSS 现在用的人很少了,而且就算是我,也不过是在一周前才 ...
- 2018-9-30-win10-UWP-剪贴板-Clipboard
原文:2018-9-30-win10-UWP-剪贴板-Clipboard title author date CreateTime categories win10 UWP 剪贴板 Clipboard ...
- Linux链接文件——管理链接文件的命令
Linux链接文件——管理链接文件的命令 摘要:本文主要学习了在Linux系统中创建链接文件的命令. ln命令 ln命令用于给文件创建链接,是Link的缩写. 基本语法 ln [选项] 源文件 目标文 ...