引用 Django 模板中的字段会给出输出 None

Referencing a field in Django template gives output None

我有问题。我不知道如何在 Django 模板中的 for 循环中引用产品类别。我已将随机类别添加到产品(在数据库中),但无论我选择哪个类别,{{product.product_category.name}} 网站上的输出都是“None”:

def all_products(request):
    product = Product.objects.all().order_by('-created_at').a
    paginator = Paginator(product, 25)
    page_number = request.GET.get('page')
    page_obj = paginator.get_page(page_number)
    context = {
        'page_obj': page_obj,
    }
    return render(request, 'ecommerce/all_products.html', context)

然后我在 Django 模板上的 for 循环看起来像这样

            {% for product in page_obj %}
                    <div class="col-xl-4">
                        <a class="card border border-light hover-shadow-9 px-4 py-2" href="{% url 'ecommerce:product_detail_view' product.slug %}">
                            <p class="mb-0 small-3 text-light">{{ product.product_producer }}</p>
                            <p class="mb-0">{{ product.name }}</p>
                            <p class="mb-0">{{ product.product_category.name }}</p>
                        </a>
                    </div>
                {% endfor %}

模型产品看起来像这样

class Product(models.Model):
    name = models.CharField(max_length=200)
    slug = models.SlugField(max_length=200, unique=True, null=False, editable=False)
    created_at = models.DateTimeField(editable=False, default=timezone.now)
    updated_at = models.DateTimeField(default=timezone.now)
    product_category = models.ManyToManyField(EcommerceProductCategory)
    description = RichTextField(max_length=2000, null=True, blank=True)
    product_producer = models.ForeignKey('ProductProducer', on_delete=models.CASCADE)
    creator = models.ForeignKey('users.CustomUser', on_delete=models.CASCADE, null=True, blank=True, related_name='product_creator')
    points_from_reviews = models.DecimalField(max_digits=6, decimal_places=2, default=0, help_text='Średnia ocena produktu')
    unique_id = models.CharField(max_length=256, unique=True)
    type_of_unique_id = models.CharField(max_length=64)
    product_img = models.FileField(upload_to='ecommerce_product_img/', null=True, blank=True)

类别与 EcommerceProductCategory 关联

class EcommerceProductCategory(MPTTModel):
    name = models.CharField(max_length=64, null=True, unique=False)
    slug = models.SlugField(max_length=40, unique=False, null=False, editable=False)
    created_at = models.DateTimeField(editable=False, default=timezone.now)
    updated_at = models.DateTimeField(default=timezone.now)
    parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')

你知道哪里出了问题吗?

您的 product_category = models.ManyToManyField(EcommerceProductCategory) 是一个 M2M 字段,它包含查询集,您必须对其进行迭代以获得所有属于当前产品的名称,如下所示

{% for product in page_obj %}
   <div class="col-xl-4">
     <a class="card border border-light hover-shadow-9 px-4 py-2" href="{% url 'ecommerce:product_detail_view' product.slug %}">
       <p class="mb-0 small-3 text-light">{{ product.product_producer }}</p>
       <p class="mb-0">{{ product.name }}</p>
       <!---Changed---->
       {% for category in product.product_category.all  %}
         <p class="mb-0">{{ category.name }}</p>
       {% endfor %}
     </a>
  </div>
{% endfor %}