1、models.py
class Publisher(models.Model):
name = models.CharField(max_length=32)
def __str__(self):
return '出版社对象名:{}'.format(self.name)
class Book(models.Model):
title = models.CharField(max_length=32)
price = models.IntegerField()
publisher = models.ForeignKey(to='Publisher', on_delete=models.CASCADE,related_name='books')
def __str__(self):
return '书籍对象名:{}'.format(self.title)
class Author(models.Model):
name = models.CharField(max_length=32)
books = models.ManyToManyField(to='Book',related_name='authors')
def __str__(self):
return self.name
2、多对多.py
import os
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "orm_about.settings")
import django
django.setup()
from app01 import models
# 拿到作者的对象;books为models里面设置的管理集related_name='books';默认为book_set;
# obj = models.Author.objects.get(id=1)
# print(obj.books.all().values())
# 书籍的管理对象设置所有书的作者都是id=1
# obj.books.set(models.Book.objects.all())
# 将作者id=1的所有书籍的对应关系清空
# obj.books.set([])
# 添加作者id=1的针对所有书的对应关系
# obj.books.add(*models.Book.objects.all())
# 添加作者id=1,书籍id=2,3,4,5的对应关系
# obj.books.add(2, 3, 4, 5)
# 删除作者id=1,书籍id=4 的对应关系
# obj.books.remove(4)
# 清除所有对象关系
# obj.books.clear()
# 利用书籍管理对象创建一本书
# obj.books.create(title='JAVA核心编程', price=30, publisher_id=4)
# obj = models.Book.objects.get(id=5)
# print(obj.authors.all().values())
# obj.authors.create(name='egon')
# 通过外键的反向查询
# obj = models.Publisher.objects.get(id=1)
# obj.books.set(models.Book.objects.filter(id__in=[2, 3]))
# obj.books.add(*models.Book.objects.filter(id__in=[4, 5]))