表关系:
- many to one
- many to many
- one to one
many to one
记录是如何创建出来的? 先创建one,在在创建many,创建时加入ForeignKey
from django.db import models # Create your models here. class Enter(models): name = models.CharField(max_length=30) def __str__(self): return self.name __repr__ = __str__ class Blog(models): name = models.CharField(max_length=30) entry = models.ForeignKey(Enter) #参数为one项的类名 def __str__(self): return self.name __repr__ = __str__
使用交互进行检索
In [1]: from blog.models import Entry, Blog In [2]: entry1 = Entry.objects.create(name='alen') #创建对应的one项(Entry) In [3]: entry2 = Entry.objects.create(name='max') In [4]: entry3 = Entry.objects.create(name='carl') In [6]: blog1 = Blog.objects.create(name='alen_blog1', entry=entry1) #创建对应many项 In [8]: blog1.entry #(many)从many端进行检索到one Out[8]: alen In [9]: blog1.entry_id Out[9]: 1 In [10]: entry1.blog_set #(one)它所对应的blog(many)都有哪些 Out[10]: <django.db.models.fields.related_descriptors.create_reverse_many_to_one_manager.<locals>.RelatedManager at 0x7f438ce2db00> In [11]: entry1.blog_set.all() Out[11]: <QuerySet [alen_blog1]>
如何把这这种对应的结果关系如何在web界面实现?
many to many
class Author(models.Model): name = models.CharField(max_length=30) def __str__(self): return self.name class Book(models.Model): #一个作者可以有多本书,一本书可以有多个作者 name = models.CharField(max_length=30) author = models.ManyToManyField(Author) def __str__(self): return self.name
同步表,数据库中:
show tables;
| blog_book |
| blog_book_author |自动创建的两个表的关系表
| blog_user |
对数据进行管理
[root@centos7 csvt04]# python3 manage.py shell
In [2]: from blog.models import Author, Book In [3]: Author.objects.create(name='Alen') Out[3]: <Author: Alen> In [4]: Author.objects.create(name='Ben') Out[4]: <Author: Ben> In [5]: Author.objects.create(name='Carl') Out[5]: <Author: Carl> In [6]: Author.objects.create(name='Dev') Out[6]: <Author: Dev> In [7]: author = Author.objects.all() In [8]: author Out[8]: <QuerySet [<Author: Alen>, <Author: Ben>, <Author: Carl>, <Author: Dev>]> In [9]: b1 = Book() In [10]: b1.name = 'python book1' In [11]: b1.save() In [12]: alen = Author.objects.get(name='Alen') In [13]: alen Out[13]: <Author: Alen> In [14]: b1.author.add(alen) In [16]: b1.author.add(author[1]) In [17]: b1.author.all() Out[17]: <QuerySet [<Author: Alen>, <Author: Ben>]> In [18]: b1.author.add(author[2]) In [19]: b1.author.remove(alen) In [20]: b1.author.all() Out[20]: <QuerySet [<Author: Ben>, <Author: Carl>]> In [21]: b1.author.filter(name='Carl') Out[21]: <QuerySet [<Author: Carl>]> In [22]: b1.author.filter(name='Dev') Out[22]: <QuerySet []> In [23]: alen Out[23]: <Author: Alen> In [24]: alen.book_set.all() Out[24]: <QuerySet []>
In [26]: alen.book_set.add(b1) In [27]: alen.book_set.all() Out[27]: <QuerySet [<Book: python book1>]> In [28]: alen.book_set.create(name='python boo2') Out[28]: <Book: python boo2> In [29]: alen.book_set.all() Out[29]: <QuerySet [<Book: python book1>, <Book: python boo2>]> In [30]: Book.objects.all() Out[30]: <QuerySet [<Book: python book1>, <Book: python boo2>]>