要获取ManyToManyField类型的字段和其值,可以使用以下方法:
values()
方法获取ManyToManyField类型字段的值。prefetch_related()
方法预取ManyToManyField类型字段的值。queryset.values_list()
方法获取ManyToManyField类型字段的值。queryset.annotate()
方法注释ManyToManyField类型字段的值。下面是每种方法的代码示例:
values()
方法获取ManyToManyField类型字段的值:# models.py
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
# views.py
books = Book.objects.all().values('title', 'authors__name')
for book in books:
print(book['title'], book['authors__name'])
prefetch_related()
方法预取ManyToManyField类型字段的值:# models.py
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
# views.py
books = Book.objects.all().prefetch_related('authors')
for book in books:
print(book.title, [author.name for author in book.authors.all()])
queryset.values_list()
方法获取ManyToManyField类型字段的值:# models.py
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
# views.py
books = Book.objects.values_list('title', 'authors__name')
for book in books:
print(book[0], book[1])
queryset.annotate()
方法注释ManyToManyField类型字段的值:# models.py
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
# views.py
books = Book.objects.annotate(author_names=Concat('authors__first_name', 'authors__last_name'))
for book in books:
print(book.title, book.author_names)
以上方法中的Author
是ManyToManyField字段的相关模型。根据实际情况,需要根据自己的模型和字段进行相应的调整。