django基础三
表结构的设计(多对多)
class Book(models.Model): title = models.CharField(max_length=32) pub = models.ForignKey('Publisher',on_delete=models.CASCADE) class Author(models.Model): name = models.CharField(max_length=32) books = models.ManyToManyField('book') #描述多对多关系,不生成字段生成关系表
查询
all_authors = models.Author.objects.all9).order_by('id') for author in all_authors: print(author) print(author.name) print(author.pk) print(author.books) #关系管理对象 print(author.books.all()) #所关联的所有对象 print('*'*32)
新增
books = requrst.POST.getlist('books') #获取多个元素 #新建作者 author_obj = models.Author.create(name=name) #给作者和书籍绑定关系 author_obj.books.set(books) #[id,id]
创建多对多的表的方法
1.django通过ManyToManyField自动创建第三张表 class Book(models.Model): title = models.CharField(max_length=32) pub = models.ForeignKey('Publisher',on_delete=models.CASCADE) #author = models.ManyToManyField('Author') #描述多对多关系不生成字段生成关系表 def __repr__(self): return self.title __str__ = __repr__ class Author(models.Model): name = models.CharField(max_length=32) books = models.ManyToManyField('Book') #描述多对多关系,不生成字段生成关系表 2 自己手动创建第三张表 class Book(models.Model): title = models.CharField(max_length=32) class Author(models.Model): name = models.CharField(max_length=32) class Book_Author(models.Model): book = models.ForeignKey(Book,on_delete=models.CASCADE) author = models.ForeignKey(Author,on_delete=models.CASCADE) date = models.DateField() 3.自己创建 + ManyToManyField class Book(models.Model): title = models.CharField(max_length=32) class Author(models.Model): name = models.CharField(max_length=32) books = models.ManyToManyField(Book,through='Book_Author',through_fields=['author','book']) class Book_Author(models.Model): book = models.ForeignKey(Book,on_delete=models.CASCADE) author = models.ForeignKey(Author,on_delete=models.CASCADE) date = models.DateField()

浙公网安备 33010602011771号