首席执行官在本文中注明将向您介绍Django如何获取更多信息以及将相关内容添加到Django中的多个关系。我希望这对每个人都会有所帮助。让我们来看看。
本文目录清单:
1.如何理解django如何做更多的对2.如何在django模型中实现外键。模型3,python + django multi -table联合查询方法寻求建议4.如何使用django多django到许多5,django更多地插入更多以插入更多。数据实际上是传统关系的物理关系建模的内容,连接,连接实体与实体之间的关系。
例如,一个人只能有一个父亲,一个父亲可以生多个孩子。这是父亲和孩子之间的一对一。
如果父亲有两个弟弟和两个儿子,那么父亲的孩子有两个叔叔,每个叔叔都有两个侄子。这称为更多对。
首先,标题中使用的Django版本是什么?Django似乎从未见过外国模型。根据ORM的说法,外国人实际上是SQL中的外部钥匙。就个人而言,房东的问题是,一个领域可以与其他多个表相对应,如下所示:
类Whatreyoutrytoask:
FILED_XXX = model.Foreignkey((MODLA,modelb,)))
对于SQL来说,这是不科学的,它将无法与多个外部键相对应。如果要实现此效果,则只能拥有一个模型,modelb和File的中间表格,与此相对应。
班级中间(Models.Model):
model_a = model.foreignkey(modla)
model_b = model.foreignkey(modelb)
类Whatreyoutrytoask:
FILED_XXX = Models.Foreignkey(可中间)
简而言之,ModelA和ModelB之间存在关系。以上方法是指示一个可中间的表。实时您可以在django.modela或ModelB中使用Manytomany设置ManyTomany字段。请检查文档以获取特定的USANANY使用情况。
类Modela(Model.Model):
model_bs = manytomany(modelb)
类Whatreyoutrytoask:
FILED_XXX = models.Foreignkey(modla)
#或此,取决于特定实施的需求
#filed_xxx = models.foreignkey(modelb)
让我们回忆第5章中有关书籍(书)的数据模型:
1
来自django.db导入模型
类出版商(Models.Model):
name = models.charfield(max_length = 30)
地址= model.Charfield(max_length = 50)
city = models.charfield(max_length = 60)
state_provring = model.charfield(max_length = 30)
country = models.charfield(max_length = 50)
网站= models.urlfield()
def __unicode __(self):
返回self.name
班级作者(Models.Model):
first_name = models.charfield(max_length = 30)
last_name = models.charfield(max_length = 40)
电子邮件= models.emailfield()
def __unicode __(self):
返回u'%s%s'%(self.first_name,self.last_name)
课程(Models.Model):
title = models.charfield(max_length = 100)
作者= model.manytomanyfield(作者)
publisher = models.foreignkey(发布者)
publication_date = model.datefield()
def __unicode __(self):
返回self.title
例如,在第5章的解释中,数据库对象的特定字段的值只需要直接使用属性。例如,要确定具有ID的书的标题,我们要这样做:这样做:
来自mysite.books.models导入书籍
b = book.objects.get(id = 50)
B.神经
你的django书'
但是,有一个相关的对象字段,我们没有提及它是外国基金会或Manytomanyfield,它们的影响略有不同。
访问密钥的价值(外键)
当您获得外国键字段时,您将获得相关的数据模型对象。例如:
b = book.objects.get(id = 50)
B.Publisher
出版商:Apress Publishing
b.publisher.website
你''
对于``外国人''
就定义的关系而言,关系的另一端也可以反向追溯,但是由于不对称之间的关系,它略有不同。通过``出版商''的对象,直接
书籍,使用Publisher.book_set.all(),如下:
p = publisher.objects.get(name ='apuse Publishing')
p.book_set.all()
[巴斯:django书,书:潜入蟒蛇,...]
实际上,book_set只是一个QuerySet(请参阅第5章的引入),因此它可以实现数据过滤和除法,例如QuerySet,例如:
1
p = publisher.objects.get(name ='apuse Publishing')
p.book_set.filter(name__icontains ='django')
[书:Django书,书:Pro Django]
属性名称book_set由小写(例如book)和_set组成。
访问多对多价值)
多头键和外部密钥是相同的,但是我们正在处理QuerySet而不是模型实例。例如,如何在此处查看本书的作者:
b = book.objects.get(id = 50)
b.authors.all()
[作者:Adrian Holovaty,作者:Jacob Kaplan-Moss]
b.authors.filter(first_name ='adrian')
[作者:Adrian Holovaty]
b.authors.filter(first_name ='adam')
[]
也可以是反向查询。要查看作者的所有书籍,请使用funer.book_set,AS:
a = rution.objects.get(first_name ='admin',last_name ='holovaty'))
a.book_set.all()
[书:django书,书:阿德里安的另一本书]
在这里,就像使用foreferkey字段一样,属性名称book_set是在数据模型(模型)名称之后添加的。
更改数据库模式(数据库架构)
3
当我们在第5章中介绍SynCDB命令时,我们注意到SynCDB创建了数据库中没有的表。它没有同步数据模型的修改,也没有处理数据模型的删除。如果您添加或修改数据模型中的字段或删除数据模型,则需要在数据库中手动修改它。本段将解释特定的:
在处理模型修改时,重要的是要记住Django数据库层的工作流程。
如果该模型包含在数据库中尚未建立的字段,则Django将报告错误的信息。当您首次使用DJANGO数据库API请求表时会导致错误(也就是说,它将在运行时造成错误,而不是编译))。
3
Django不在乎数据库表中的模型中是否有未定义的列。
Django不在乎数据库中的模型是否尚未表示形式。
1
更改模型的模型体系结构意味着需要按顺序更改Python代码和数据库。
添加字段
1
当您要在产品设置表(或模型)中添加字段时,要使用的技术是使用Django来不关心模型中的列的特征是否不关心。该策略是在该策略中添加字段数据库,然后同步Django模型以包含新字段。
3
但是,这里存在鸡蛋和鸡肉的问题。因为您想知道新添加的SQL语句,所以您需要从中使用Django
查看了manage.py sqlass命令,这需要模型中存在该字段。(注意:您不必使用与Django相同的SQL语句来创建一个新字段,但这确实是一个好主意,这可以使所有内容保持同步。)
3
解决此鸡肉蛋的问题的解决方案是在开发人员环境中而不是发布环境中实现这一变化。(您正在使用测试/开发环境,对吗?)以下是特定的实现步骤。
首先,输入开发环境(即在发行环境中):
将字段添加到您的模型中。
运行manage.py sqlall [yourawp]测试新的创建表语句。请注意新字段的定义。
打开您的数据库交互式命令接口(例如,PSQL或MySQL,或者您可以使用
manage.py dbshell)。执行Alter表语句以添加新列。
使用python的manage.py shell导入模型并选择表单(例如,例如,
mymodel.objects.all()[:5])验证是否正确添加了新字段。如果一切顺利,所有句子都不会报告错误。
3
然后在您的产品服务器上实现这些步骤。
启动数据库的交互式接口。
5
在开发环境的第三步中执行ALTE表语句。
将新字段添加到模型中。如果您使用控制工具的特定版本,并且在第一步中,您在开发环境中进行了修改。现在,您可以在生产环境中更新代码(例如,如果使用颠覆,请执行SVN执行SVNUPDATE。
重新启动Web服务器,以便修改生效。
让我们练习,例如在第5章中将num_pages字段添加到书籍模型中。首先,我们将在开发环境中将模型更改为以下形式:
课程(Models.Model):
title = models.charfield(max_length = 100)
作者= model.manytomanyfield(作者)
publisher = models.foreignkey(发布者)
publication_date = model.datefield()
?
def __unicode __(self):
返回self.title
这个问题更加复杂,它基于您必须理解的内容。
例如:作者可以写多本书,每本书也可以有多个作者。
这就是在Django的ORM中反映的一对:派对模型和书籍模型,您需要添加一个Manytomanyfield字段。注意,这是一个派对,不是双方,您只需要添加一个字段,这不是两个字段是两个字段。
有关更详细的内容,您可以阅读我的博客。
首先,您需要建立Django的对象模型
在两个模型之间建立关系表
将数据保存到关系表中。
对于特定插入,您可以参考:
如果解决问题,请采用它!
如果没有解决,请继续询问
结论:以上是首席CTO的全部内容指出,Django如何获得更多信息和Django。