python + django 多表联合查询方法求教

python + django 多表联合查询方法求教,第1张

先让我们回忆一下在第五章里的关于书本(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下连接数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10153779.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存