先让我们回忆一下在第五章里的关于书本(book)的数据模型:
1
from djangodb import models
class Publisher(modelsModel):
name = modelsCharField(max_length=30)
address = modelsCharField(max_length=50)
city = modelsCharField(max_length=60)
state_province = modelsCharField(max_length=30)
country = modelsCharField(max_length=50)
website = modelsURLField()
def __unicode__(self):
return selfname
class Author(modelsModel):
first_name = modelsCharField(max_length=30)
last_name = modelsCharField(max_length=40)
email = modelsEmailField()
def __unicode__(self):
return u'%s %s' % (selffirst_name, selflast_name)
class Book(modelsModel):
title = modelsCharField(max_length=100)
authors = modelsManyToManyField(Author)
publisher = modelsForeignKey(Publisher)
publication_date = modelsDateField()
def __unicode__(self):
return selftitle
如我们在第5章的讲解,获取数据库对象的特定字段的值只需直接使用属性。 例如,要确定ID为50的书本的标题,我们这样做:
>>> from mysitebooksmodels import Book
>>> b = Bookobjectsget(id=50)
>>> btitle
u'The Django Book'
但是,在之前有一件我们没提及到的是表现为ForeignKey 或 ManyToManyField的关联对象字段,它们的作用稍有不同。
访问外键(Foreign Key)值
当你获取一个ForeignKey 字段时,你会得到相关的数据模型对象。 例如:
>>> b = Bookobjectsget(id=50)
>>> bpublisher
<Publisher: Apress Publishing>
>>> bpublisherwebsite
u'>
settingpy:都要配置下
USER, PASSWORD, HOST
MySQL插件 :MySQL-python version 121p2 or higher
ENGINE :djangodbbackendsmysql
NAME:你的数据库名字
PostgreSQL插件:postgresql_psycopg2 地址>
ENGINE :djangodbbackendspostgresql_psycopg2
NAME:你的数据库名字
例如我的oracle配置:
数据库设计是整个设计最基础的部分
1、django app的设计:根据系统的需求分析来设计django的app,django的开发是基于app来开发的,所以第一步就是设计app。
2、各app model 的设计:也就是设计对应的数据表
3、数据表的生成以及修改
使用在线教育系统作为实例:
userprofile的设计:在任何一个系统中,user表都是第一个被设计的,django会产生几个默认用户数据表
在设计我们自己的user表的时候,我们希望能生成自己的表又希望能够继承django的默认表,此时,我们可以继承AbstractUser(
from djangocontribauthmodels import AbstractUser
)
class UserProfile(AbstractUser):
pass
定义完UserProfile表之后,我们需要在settingpy文件中注册users app,INSTALLED_APPS = [
'users',
]
并且定义一个方法AUTH_USER_MODEL = "usersUserProfile",注意这里是使用usersUserProfile而不是usersmodelUserProfile
(1)user model的设计:
我们在设计django app的时候,每个app中都有model,model文件中很有可能用到其他app文件当中的model,这就会很容易引入循环引用的问题,为了解决这个问题,很常用的一种方法就是使用分层model的方法,也就是上一层可以引用下一层
的model,如下:
注:PEP8的在引入的规范是第一个区域是导入Python自带的包,然后隔一行的第二个区域是第三方的包,如django,然后隔一行的第三个区域是我们自己定义的一些model
(2)course model 的编写:一个数据可能和另一个数据是一对多的关系,但是一张表存储不了这种关系,所以就需要把这两个数据分别存储在不同的数据表当中,这样就会引入外键的关系。
model的FileFIield,定义了这个字段就可以在后台系统中生成上传文件的按钮
(3)oganization model的编写:
(4)operation的model编写:
所有的APP编写完成之后,我们可以建立Python的apps包,把所有的app都放到这个apps中,把所有的APP放到apps之后,会发现各个app的model的引用可能会出现红线,说明我们找不到这些引用的包,所以需要我们在settingpy文件当中
把apps加入Python的搜索目录之下,
import syssyspathinsert(0, ospathjoin(BASE_DIR, 'apps'))
以上就是关于python + django 多表联合查询方法求教全部的内容,包括:python + django 多表联合查询方法求教、django连接mysql数据库'connection refused'的解决、Python 和 Django 在WIN8下连接数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)