from django.db import models class Publisher(models.Model): name = models.CharField(max_length=32, verbose_name=\'出版社名称\') def __str__(self): return self.name class Meta: verbose_name = "name" verbose_name_plural = verbose_name class Book(models.Model): name = models.CharField(max_length=32, verbose_name=\'书名\') pub = models.ForeignKey(\'Publisher\', on_delete=models.CASCADE,related_name=\'books\', related_query_name=\'book\') def __str__(self): return self.name class Meta: verbose_name = \'name\' verbose_name_plural = verbose_name
######################## # 基于对象的查询 book_obj = models.Book.objects.get(pk=1) # 正向查询 book_obj.pub # 所关联的对象 book_obj.pub_id # 所关联的对象id # 反向查询 pub_obj = models.Publisher.objects.get(pk=1) # 不指定related_name 使用 类名下列_set pub_obj.book_set # 关系管理对象 pub_obj.book_set.all() # 所关联的所有的书籍对象 # 指定 related_name = \'books\' pub_obj.books.all() # 基于字段的查询 ret = models.Book.objects.filter(name=\'xxxxxxxx\') ret = models.Book.objects.filter(pub__name=\'出版社\') ret = models.Publisher.objects.filter(name=\'出版社\') # 不指定 related_name ret = models.Publisher.objects.filter(book__name=\'xxxxxxx\') # 指定 related_name=\'books\' ret = models.Publisher.objects.filter(books__name=\'xxxxxxx\') # 指定related_query_name=\'xxx\' ret = models.Publisher.objects.filter(xxx__name=\'xxxxx\')