微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ManyToManyField 值为 None

如何解决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

类别如下所示:

The Category looks like this

解决方法

book.categorymanager,而不是 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 举报,一经查实,本站将立刻删除。