ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

django-关系映射

2021-08-14 23:00:11  阅读:142  来源: 互联网

标签:关系 -----------------------------------------------------------------------------


一对多

定义

语法

示例

模型类的创建

otm/models.py

from django.db import models

# Create your models here.
class   Publisher(models.Model):
    name=models.CharField('出版社',max_length=20)

class Book(models.Model):
    title=models.CharField('书名',max_length=11)
    publisher=models.ForeignKey(Publisher, on_delete=models.CASCADE)

数据库显示内容

mysql> desc otm_book;
+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| id           | int         | NO   | PRI | NULL    | auto_increment |
| title        | varchar(11) | NO   |     | NULL    |                |
| Publisher_id | int         | NO   | MUL | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+
3 rows in set (0.40 sec)

mysql> desc otm_publisher;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int         | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | NO   |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)

mysql> show create table otm_book;
+----------+--------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
---+
| Table    | Create Table




   |
+----------+--------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
---+
| otm_book | CREATE TABLE `otm_book` (
  `id` int NOT NULL AUTO_INCREMENT,
  `title` varchar(11) NOT NULL,
  `Publisher_id` int NOT NULL,
  PRIMARY KEY (`id`),
  KEY `otm_book_Publisher_id_4ca7afa5_fk_otm_publisher_id` (`Publisher_id`),
  CONSTRAINT `otm_book_Publisher_id_4ca7afa5_fk_otm_publisher_id` FOREIGN KEY (`
Publisher_id`) REFERENCES `otm_publisher` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+----------+--------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
---+
1 row in set (0.05 sec)

mysql>

数据创建

shell

In [5]: p1=Publisher(name='南京大学出版社')

In [6]: p1.save()

In [7]: Book.objects.create(title='java',publisher=p1)
Out[7]: <Book: Book object (1)>

In [8]: p2=Pubilisher.objects.create(name='杭州大学出版社')

In [10]: Book.objects.create(title='java',publisher_id=2)
Out[10]: <Book: Book object (2)>

In [11]: Book.objects.create(title='django',publisher=p2)
Out[11]: <Book: Book object (3)>

数据查询


正向查询

In [19]: book1=Book.objects.get(id='1')

In [20]: book1.publisher.name
Out[20]: '南京大学出版社'

反向查询 注意是类名小写加一个下划线set(如 book_set)

In [38]: pub2=Publisher.objects.get(id=4)

In [39]: pub2.name
Out[39]: '杭州大学出版社'

In [40]: pub2.book_set.all()
Out[40]: <QuerySet [<Book: Book object (3)>]>


In [42]: pub2.book_set.all().title
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-42-be1e4f3f46eb> in <module>
----> 1 pub2.book_set.all().title

AttributeError: 'QuerySet' object has no attribute 'title'

In [43]: for i in pub2.book_set.all():
    ...:     print(i.title)
    ...:
django

标签:关系,-----------------------------------------------------------------------------
来源: https://www.cnblogs.com/yescarf/p/15142165.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有