Django 学习笔记(1)

系统配置

开发工具:python3.8.1、Django、Navicat Premium 12
编译语言:python,mysql
数据库:MySql 8.0.18
开发平台:Pycharm专业版
操作系统:Windows10

问题笔记 

1.  django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.​​

注释掉以下语句

if version < (1, 3, 13):
    raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)

2. TemplateSyntaxError at /'staticfiles' is not a registered tag library.

{% load staticfiles %}并{% load admin_static %}分别在Django 2.1弃用,并且在Django 3.0移除。
		
如果模板中包含以下任何内容:
{% load staticfiles %}
{% load static from staticfiles %}
{% load admin_static %}
	
您应该将标签替换为:
{% load static %}

3. django怎样终止服务器

Ctrl+c

4. django 中设置联合主键(关联表)

在django项目中,我们要设置联合主键时,需要写一个类,如:

class Dimensions(models.Model):
    PKID = models.AutoField(primary_key=True)
    ......


class Parts(models.Model):
    PKID = models.AutoField(primary_key=True)
    ......


class DimensionRecord(models.Model): 
    Part = models.ForeignKey("Parts", on_delete=models.CASCADE) 
    Dim = models.ForeignKey("Dimensions", on_delete=models.CASCADE) 
    ......

    class Meta: 
        unique_together = ("Part", "Dim")

5. Django 数据库多字段同时关联一个表为外键产生冲突的解决办法

给models.ForeignKey()加入related_name参数,定义不同的关联名称。例如:

class AssemblyInfo(models.Model):
    PKID = models.AutoField(primary_key=True)
    ParentPartInfo = models.ForeignKey("PartInfo", related_name="Parent", on_delete=models.CASCADE)
    ChildPartInfo = models.ForeignKey("PartInfo", related_name="Child", on_delete=models.CASCADE)
    ......

6. Django在cmd运行时出现AssertionError: A model can't have more than one AutoField.这个错误

在models.py中添加这个primary_key=True,切记每一个自增得属性里面都要加呦!

7. 遇到的错误:PyCharm database查看db.sqlites文件无内容


学习笔记

1. 创建类的代码已经,写好,此时需要两句代码将类转换成对应的数据表:

python manage.py makemigrations    #将类转换成数据表结构
python manage.py  migrate               #根据上一句代码生成数据表

2. on_delete=models.CASCADE, # 删除关联数据,与之关联也删除  

当你设定外键的时候在django3.0的版本必须加上这一句

3. ORM操作(仅录入使用到的)

1.字段类型:

属性名 = models.字段类型,定义属性时需要指定字段类型, 通过字段类型的参数指定选项

属性名

  • 不允许使用python的保留关键字
  • 不允许使用mysql的保留关键字
  • 不允许使用连续的下划线,因为Django的查询语法就是连续的下划线

AutoField:自动增长的IntegerField, 不指定时Django会自动创建属性名为id的自动增长属性

BooleanField布尔字段,值为True或False

CharField(max_length=20)字符串

  • 参数max_length表示最大字符个数

TextFiled:大文本字段,一般超过4000个字符时使用

IntegerField:整数

DecimalField(max_digits=None, decimal_places=None)可以指定精度的十进制浮点数

  • 参数max_digits表示总位数
  • 参数decimal_places表示小数位数

DateField[auto_now=False, auto_now_add=False])日期

  • 参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false
  • 参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false
  • 参数auto_now_add和auto_now是相互排斥的,组合将会发生错误

DateTimeField日期时间,参数同DateField

2.字段选项:

null如果为True,表示允许为空,默认值是False

default:默认值,这可以是值或可调用对象。如果可调用,则每次创建新对象时都会调用它。

primary_key:若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用

注意:Django会自动为表创建主键字段

  • 如果使用选项设置某属性为主键字段后,Django不会再创建自动增长的主键字段
  • 默认创建的主键字段为id,可以使用pk代替,pk全拼为primary key 

3.关系字段类型

关系型数据库的关系包括三种类型:

ForeignKey:一对多,将字段定义在多的一端中

  • publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)  # 绑定外键,关联出版社
  • publisher = models.ForeignKey('Publisher', on_delete=models.CASCADE)  # 默认关联主键
  • publisher = models.ForeignKey('Publisher', on_delete=models.CASCADE, to_field='name')  # 关联指定 name 字段

除此之外,我们还要注意在ForeignKey中的on_delete参数,这里建议指定为models.CASCADE,表示级联删除。

此外还有以下几个参数,供我们选用:

  • CASCADE:这就是默认的选项,级联删除,Django1.x中无需显性指定它。
  • PROTECT: 保护模式,如果采用该选项,删除的时候,会抛出ProtectedError错误。
  • SET_NULL: 置空模式,删除的时候,外键字段被设置为空,前提就是``blank=True,null=True`,定义该字段的时候,允许为空。
  • SET_DEFAULT:置默认值,删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认

ManyToManyField:多对多,将字段定义在任意一端中

OneToOneField:一对一,将字段定义在任意一端中

可以维护递归的关联关系,使用self指定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值