资讯专栏INFORMATION COLUMN

Django定义和使用模型

fyber / 976人阅读

摘要:希望自己不会错过什么定义模型为什么使用丰富的变量类型为了简单,我直接编写和官网一样的例子。我直接使用命令的话,我们可以查看里面有个目录。

学习动力
我今年的项目主要基于Django开发,学习了很多新东西。我很多时候,担心日后会忘记很多有趣的东西,我想写下笔记。但是从哪个方面入手,我没有思路。所以查看了一些书,根据目录进行总结。希望自己不会错过什么!

定义模型
为什么使用ORM
Django丰富的变量类型

为了简单,我直接编写和官网一样的例子。

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

我直接使用makemigrations命令的话,我们可以查看myapp里面有个migrates目录。

from __future__ import unicode_literals

from django.db import migrations, modelsclass 

Migration(migrations.Migration):

    dependencies = [ 
    ]   

    operations = [ 
        migrations.CreateModel(
            name="Person",
            fields=[
                ("id", models.AutoField(verbose_name="ID", serialize=False, auto_created=True, primary_key=True)),
                ("first_name", models.CharField(max_length=30)),
                ("last_name", models.CharField(max_length=30)),
            ],  
        ),  
    ] 

从上面的代码可以看出,系统不仅仅给生成first_name,last_name还有id,它的类型是AutoField类,既然学习的是类型的定义,那我现在可以在自己的脑海中留下一个思维图。

好啦!我现在有几个问题:
1)我一定要生成id吗?
2)我可以修改CharField的max_length属性,还能修改什么属性?
3)migrations.Migration又是一个什么样子的类呢?
现在执行migrate然后查看sqlite生成的表格。

CREATE TABLE "myapp_person" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "first_name" varchar(30) NOT NULL, "last_name" varchar(30) NOT NULL);

现在又有几个问题:
1)为什么表被命名为myapp_person,我们并没有在哪设置这个名字啊?
2)我们能否使用别的域作为主键?
3)我们能否自定义表名?
答案如下:
1),3) 可以参考这里
我们来试试看,如何设置Meta类里面的属性,来改变我们的表名。

class Person(models.Model):
    #Rest of code  
    class Meta:
        db_table = "new_table"

执行makemigrations我们会在终端得到下面的信息。

查看我们的0002文件,得到如下的内容。

from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [ 
        ("myapp", "0001_initial"),
    ]   

    operations = [ 
        migrations.AlterModelTable(
            name="person",
            table="new_table",
        ),  
    ]  

从上面生成的代码可以看出,django并不是从新生成数据库的各个域,只是修改名字而已,与我们平时使用sql语句的做法应该是一致的。继续运行migrate我们查看生成的sql语句如下:

CREATE TABLE "new_table" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "first_name" varchar(30) NOT NULL, "last_name" varchar(30) NOT NULL);

的确,是从新改写了表名,我们得到了新的表名,那么如果里面已经存有数据,该表名会删除数据吗?为了,进一步测试,我们先把这个类注册到admin中。

from django.contrib import admin

from .models import Person

admin.site.register(Person)

记住,别忘记创建管理员账户。创建后就可以在管理员里面增加数据到person类啦。
然后,我们再修改Meta的名字,看看数据是否会被删除。

现在,数据为这个。我们试着从新把表名改了(改回系统默认的)

class Migration(migrations.Migration):

    dependencies = [ 
        ("myapp", "0002_auto_20151213_0903"),
    ]   

    operations = [ 
        migrations.AlterModelTable(
            name="person",
            table="myapp_person",
        ),  
    ]  

我们这次,查看到系统是更加第二次修改的记录进行的,我们继续看看我们的数据是否丢失。

数据还在,说明我们的django是会保护我们的数据的,我们可以放心的去做啦。

使用模型
总结

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37660.html

相关文章

  • Django搭建个人博客:编写博客文章的Model模型

    摘要:在里写一个数据库驱动的应用的第一步是定义模型,也就是数据库结构设计和附加的其它元数据。模型元数据是任何不是字段的东西,例如排序选项数据库表名单数和复数名称和。 Django 框架主要关注的是模型(Model)、模板(Template)和视图(Views),称为MTV模式。 它们各自的职责如下: 层次 职责 模型(Model),即数据存取层 处理与数据相关的所有事务: 如何存取...

    winterdawn 评论0 收藏0
  • Python学习之路17-Django入门

    摘要:编程从入门到实践笔记。执行命令后,项目的根目录下会多出一个名为的数据库文件。下面创建一个主题类用户学习的主题返回模型的字符串表示类是中的一个定义了模型基本功能的类。这种交互式环境称为,常用语测试项目和排除故障。 《Python编程:从入门到实践》笔记。从本篇开始将是该书的最后一个项目,将用3篇文章来介绍Django的基础。完成一个学习笔记的小网站。 1. 前言 在本篇中,我们将: 用...

    shadowbook 评论0 收藏0
  • django官方文档1.11编翻:首页

    摘要:源网页说明文档所有关于你应该且必须知道的。性能和优化概述的兼容性旨在兼容多种不同版本的支持的兼容性地理框架打算成为世界级的地理框架。其目标是尽可能简单地构建应用程序并利用空间使能数据的功能。 源网页:https://docs.djangoproject.co... django说明文档 所有关于django你应该且必须知道的。 第一步 你是否django编程新手,那就从此开始!从零开始...

    Michael_Lin 评论0 收藏0
  • Django 管理现有数据库

    摘要:默认对此没有很好的支持数据库结构是由另一个工具管理的,并没有直接修改数据库结构的权限。第二个思路是利用的多数据库支持。由于使用后台的用户基本上只有公司内部的业务人员,数据量不会大,用服务器级的数据库有牛刀之嫌。 在多数项目中,总有一些几乎一成不变的 CRUD 操作,编写这些代码很无聊,但又是整个系统必不可少的功能之一。我们在上一个项目中也面临类似的问题,虽然已经实现了一个功能相对完整的...

    王笑朝 评论0 收藏0
  • Django 管理现有数据库

    摘要:默认对此没有很好的支持数据库结构是由另一个工具管理的,并没有直接修改数据库结构的权限。第二个思路是利用的多数据库支持。由于使用后台的用户基本上只有公司内部的业务人员,数据量不会大,用服务器级的数据库有牛刀之嫌。 在多数项目中,总有一些几乎一成不变的 CRUD 操作,编写这些代码很无聊,但又是整个系统必不可少的功能之一。我们在上一个项目中也面临类似的问题,虽然已经实现了一个功能相对完整的...

    Donald 评论0 收藏0

发表评论

0条评论

fyber

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<