django 我想返回子类别(多对多字段到类别---另一个类),def为__str__(self):

yeotifhr  于 2023-03-20  发布在  Go
关注(0)|答案(1)|浏览(106)

在最后一行,我想返回子类别,它没有显示任何错误,但它不是显示,因为我期待它是显示像

NEW ITEM--**Shop.Category.None**
new arrival--**Shop.Category.None**

Adidas Shoes blue color--**Shop.Category.None**
class Category(models.Model):
    CHOICES = (
        ('Accessories','Accessories'),
        ('Fashions','Fashions')
               )
  


class IndexProduct(models.Model):
    Title = models.CharField(max_length=50)
    Subcategory = models.ManyToManyField(Category)
    def __str__(self):
       return self.Title + '--' + str(self.Subcategory)
mrwjdhj3

mrwjdhj31#

当你直接访问一个多对多字段时,Django会返回一个Related Manager(Queryset Manager)。
这意味着您可以通过self.Subcategory.all()访问所需的内容
下面的内容应该能帮助你入门:

class Category(models.Model):
    CHOICES = (
        ('Accessories', 'Accessories'),
        ('Fashions', 'Fashions')
    )
    name = models.CharField(max_length=225, choices=CHOICES)

class IndexProduct(models.Model):
    ...
    def __str__(self):
        names = self.Subcategory.all().values_list('name', flat=True)
        if names:
            return f"{self.email} - {names}"
        return f"{self.email} - No subcategory"

不过请注意,当您有很多类别时,这可能会很慢,因为每次访问IndexProduct时都会得到N个类别。
阅读此处了解更多信息:https://docs.djangoproject.com/en/4.1/ref/models/fields/#manytomanyfield

相关问题