`
avaj
  • 浏览: 236299 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Django Model

阅读更多

今天晚上看了一下Django文档的model部分,简要翻译一下,以备后用:

 

原文地址:

http://docs.djangoproject.com/en/dev/topics/db/models/


定义一个Model


每一个model必须是django.db.models.Model的一个子类
每个字段被定义为一个类的属性,每个属性对应数据库表的一个字段

from django.db import models
class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

对应下面的sql:
CREATE TABLE myapp_person (
    "id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(30) NOT NULL
);
 


默认情况下,Django会在model名的前面加上你的“应用的名称_”作为数据库表的名称。
比如你的应用是polls,定一个了一个model叫做Person,那么数据库表的名称是polls_person

默认情况下,Django汇给你自动增加一个叫做id的字段,并设置这个字段为主键。


使用Model

当定义了Model之后,你需要告诉Django去使用这些models,
修改settings.py中的INSTALLED_APPS属性,增加包含models.py的模块名称即可。


比如你的models.py文件的路径是 mysite.myapp.models.py那么只需要这样写即可:

INSTALLED_APPS = (
	#...
	'mysite.myapp',
	#...
)
 

注意:如果你在settings.py的INSTALLED_APPS中添加了新的app,需要重新运行manage.py syncdb命令



字段类型
在model中的每一个字段都必须是Field类的一个实例。Django使用字段类型确定下面几件事情:
1、数据库字段的类型
2、在admin界面中使用的html组建,比如是文本框,还是单选框等。
3、必填项验证。

字段选项
每一个字段都有一些参数,比如CharField字段有一个max-length的参数,表示字段类型的长度。

Django定义了一些所有字段(类)都有的公共的参数,下面简单的总结一下他们的使用:


null
如果是True,Django会在数据库中将此字段的值置为NULL,默认值是False

blank
如果是True,那么这个字段是可以不填的。默认是False

blank和null的区别:null纯粹是与数据库有关系的。而blank是与页面必填项验证有关的。
如果blank=False,那么这个字段就是必填的。

choices
An iterable (e.g., a list or tuple) of 2-tuples to use as choices for this field. If this is given, Django's admin will use a select box instead of the standard text field and will limit choices to the choices given.

一个二维的元组被用作choices,如果这样定义,Django会select box代替普通的文本框,
并且限定choices的值是元组中的值

YEAR_IN_SCHOOL_CHOICES = (
    ('FR', 'Freshman'),
    ('SO', 'Sophomore'),
    ('JR', 'Junior'),
    ('SR', 'Senior'),
    ('GR', 'Graduate'),
)
 


default:
可以设置字段的默认值,它可以是一个普通的值,或者是一个可以调用(callable)的对象,如果是一个callable的对象,那么每次调用的时候都会创建一个新的对象。

primary_key:
如果是True,那么这个字段就是这个表的主键。

如果在model的字段上没有定义primary_key=True,那么Django会自动添加一个IntegerField(id)类型的字段,作为主键。所以一般情况下你不需要设置这个属性,除非你不想使用默认的设置。

unique
如果Ture,设定字段的值是唯一的。

Automatic primary key fields
默认情况下,Django会自动为每一个model定义如下字段:

 

id = models.AutoField(primary_key=True)
 


这是一个自增长的主键

你可以在任何一个字段上设置primary_key=True,如果Django发现你定义了这个属性,他就不会自动添加id字段了

Verbose field names
除了ForeignKey,ManyToManyField,OneToOneField外,每一个field类型的第一个参数,是一个可选参数-Verbose field names。如果没有这个参数,Django会自动的按照字段的名称创建一个。两个单词之间会用空格分割。

 

verbose name 是Person's first name

first_name = models.CharField("Person's first name", max_length=30)

 verbose name是 first name

first_name = models.CharField(max_length=30)
 

 

ForeignKey, ManyToManyField and OneToOneField 要求第一个字段必须是一个model class,所以你可以使用
关键字参数定义verbose name:

 

poll = models.ForeignKey(Poll, verbose_name="the related poll")
sites = models.ManyToManyField(Site, verbose_name="list of sites")
place = models.OneToOneField(Place, verbose_name="related place")

 


这里约定verbose name的第一个字母不要大写。Django会在需要的时候,自动转化为大写。

Relationships
Django定一个三种通用的类型,去描述数据库表之间的关系:
many-to-one, many-to-many and one-to-one.

Many-to-one relationships:

使用ForeignKey来定一个Many-to-one的关联关系。就像使用普通的Field一样。
ForeignKey的第一个参数必须定义这个model与哪一个model关联

比如,Car model有一个Manufacturer:一个制造厂(one)可以生产很多汽车(Many),但是一个汽车只能有一个制造厂

class Manufacturer(models.Model):
    # ...

class Car(models.Model):
    #一个汽车只能有一个制造厂
    manufacturer = models.ForeignKey(Manufacturer)
    # ...
 

 

未完待续......

分享到:
评论

相关推荐

    Python Django Model模型

    ### Python Django Model模型 #### 模型概述 Python Django Model模型是Django框架中的核心组成部分之一,主要用于描述和操作数据库中的数据。通过Model模型,开发人员可以使用Python类来定义数据库表的结构,包括...

    根据postgresql或者greenplum数据库创建表的sql语句转换成最基本的django model

    有时候在django中使用postgresql和greenplum数据库时,使用django model的数据库同步命令时会有问题,生成不了对应的数据库表,无奈只有手工先创建数据库表,然后再根据表字段手动创建model,为了提高效率我写了一个...

    Django model重写save方法及update踩坑详解

    在Django框架中,Model是数据操作的核心,它与数据库表结构相对应。有时,我们需要在保存或更新数据时执行一些额外的操作,如数据验证、计算或其他业务逻辑。本篇文章将详细讲解如何重写Django Model的`save()`方法...

    Django model反向关联名称的方法

    ### Django Model 反向关联名称的方法详解 #### 一、引言 在使用Django进行Web开发时,经常需要处理数据库中的多对多关系(Many-to-Many)和一对多关系(One-to-Many)。这两种关系通常通过`ManyToManyField`和`...

    解决django model修改添加字段报错的问题

    关于django models中添加字段的一个小节,记录下 django的models中已经写好了字段,可是后面我又想在添加一些字段,...以上这篇解决django model修改添加字段报错的问题就是小编分享给大家的全部内容了,希望能给大家一

    Django model class Meta原理解析

    在Django框架中,Model是数据模型的定义,它描述了数据库中的表结构。而`class Meta`是一个内嵌类,用于定义Model的元数据,这些元数据并不是字段,但它们提供了关于Model的重要配置信息。元数据选项允许开发者对...

    浅谈django model postgres的json字段编码问题

    然而,在实际开发中,我们可能会遇到一个问题,即当我们尝试将特定的数据类型,如uuid、datetime等,存储到Django Model的JSONField时,会遇到编码问题,导致程序抛出异常。 Django的默认JSON编码器(`django.core....

    详解Django的model查询操作与查询性能优化

    在Django开发中,Model层是整个框架的核心部分,负责与数据库进行交云。高效地进行模型查询操作以及进行查询性能优化对于创建一个响应迅速的应用至关重要。本文将详细介绍Django的Model查询操作,并分享优化查询性能...

    Django model select的多种用法详解

    《Django model update的各种用法介绍》文章介绍了Django model的各种update操作,这篇文章就是她的姊妹篇,详细介绍Django model select的用法,配以对应MySQL的查询语句,理解起来更轻松。 基本操作 # 获取所有...

    在Django model中设置多个字段联合唯一约束的实例

    Django中model部分的写法, 参见 unique-together 部分文档。 class MyModel(models.Model): field1 = models.CharField(max_length=50) field2 = models.CharField(max_length=50) class Meta: unique_...

    django model通过字典更新数据实例

    在Django框架中,模型(Model)是与数据库交互的主要方式。`django model through dictionary update data instance`是指利用Python字典来更新Django模型实例的数据,这是一种高效且便捷的方法。下面我们将详细探讨...

    django model object序列化实例

    本文将深入探讨如何对Django Model对象进行序列化,特别是在处理单个实例时遇到的问题及其解决方法。 首先,Django自带了一个`django.core.serializers`模块,它提供了方便的API来处理模型实例的序列化。当处理...

    Django model update的多种用法介绍

    在Django框架中,Model是数据操作的核心,用于定义数据库中的表结构。`update`方法是Model提供的一个高效且方便的工具,用于批量更新数据。本文将深入探讨Django Model `update`方法的多种用法及其注意事项。 首先...

    PyPI 官网下载 | django-model-logs-0.1.15.tar.gz

    《PyPI与Django Model Logs库详解》 PyPI(Python Package Index)是Python开发者们发布和分享自己软件包的官方平台,它为全球的Python社区提供了丰富的第三方库。在PyPI官网上,我们可以找到各种各样的Python工具...

    详解Django model转字典的几种方法

    在Django框架中,Model是数据库表的抽象表示,它提供了ORM(对象关系映射)功能,使得开发者可以通过Python对象来操作数据库。然而,在实际开发中,有时我们需要将Model对象转换为字典类型,以便于数据传输,比如在...

    Pycharm 操作Django Model的简单运用方法

    在Django框架中,Model是核心组件之一,它与数据库交互,定义了应用程序的数据结构。PyCharm作为一款强大的Python IDE,提供了方便的工具来帮助开发者更高效地操作Django的Model。本篇文章将详细介绍如何在PyCharm中...

Global site tag (gtag.js) - Google Analytics