如何解决ManyToManyField 值为 None
我正在尝试将 ManytoManyField 用于我的 Book ,但它在网页和管理中显示 None。这是我的代码
class Category (models.Model):
name = models.CharField(max_length=40)
def __str__(self):
return self.name
class Book(models.Model):
title = models.CharField(max_length=40)
author = models.CharField(max_length=30)
description = models.TextField()
category = models.ManyToManyField(Category)
publish_year = models.CharField(max_length=5)
language = LanguageField(max_length=40,default=False)
age_group = models.CharField(max_length=5,choices=GROUP_CHOICES)
downloaded_times = models.IntegerField()
rate = models.FloatField()
rate_times = models.IntegerField()
rate_total = models.FloatField()
book_image = models.ImageField(upload_to='book_cover_image',default="image.png")
pdf_file = models.FileField(default=True,upload_to='media')
def __str__(self):
return f"{self.title}|-|{self.category}|-|{self.author}"
在views.py中我有
def get_queryset(self):
query = self.request.GET.get('q')
object_list = Book.objects.filter(
Q(title__icontains=query)
)
print(Book.category)
return object_list
类别如下所示:
解决方法
book.category
是 manager,而不是 QuerySet
,您可以使用 .all()
[Django-doc] 将其转换为 QuerySet
,因此:
def get_queryset(self):
query = self.request.GET.get('q')
object_list = Book.objects.filter(
Q(title__icontains=query)
)
for obj in object_list:
print(obj.category.all())
return object_list
在您使用的 __str__
中:
def __str__(self):
return f'{self.title}|-|{self.category.all()}|-|{self.author}'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。