【问题标题】:Django two models with many-to-many relation print on templateDjango在模板上打印两个具有多对多关系的模型
【发布时间】:2020-04-05 19:46:57
【问题描述】:

我有类别和产品型号。它们具有多对多的关系。

我的模型

class ProductCategories(models.Model):

    name = models.CharField(max_length = 60)
    image = models.ImageField(upload_to = 'ProductCategories')
    publish_date = models.DateTimeField(auto_now=False, auto_now_add=True)
    is_available = models.BooleanField()


class Product(models.Model):

    category = models.ManyToManyField(ProductCategories)
    name = models.CharField(max_length = 60)
    price = models.DecimalField(max_digits=65, decimal_places=2)
    description = models.TextField()
    options = models.TextField()
    tags = models.TextField()
    publish_date = models.DateTimeField(auto_now=False, auto_now_add=True)
    stock_number = models.IntegerField()
    is_available = models.BooleanField()

我的看法

def category(request):

    categories = ProductCategories.objects.all()

    products = Product.objects.none()
    for category in categories:

        products = products.union(Product.objects.filter(category = category)[:4])

    return render(request, 'shop/shopping.html', {'categories' : categories, 'products' : products})

我的 HTML

{% for category in categories %}
<div class="row">
    <h3 style="padding-left: 15px; padding-bottom: 15px">{% filter upper %}{{ category.name }}{% endfilter %}</h3>
 </div>

 <div class="row">

 {% for product in products %}

     {{ product.category }}

 {% endfor %}
 </div>
 {% endfor %}

我想列出类别。在每个类别下,将列出 4 个产品。

是否可以传递包含产品及其类别的查询集?

谢谢,

【问题讨论】:

    标签: python django django-models django-templates django-views


    【解决方案1】:

    你可以这样做:

    def category(request):    
        categories = ProductCategories.objects.all()              
        return render(request, 'shop/shopping.html', {'categories' : categories})
    

    还有模板

    {% for category in categories %}
    
        {% for product in category.product_set.all|slice:":4" %}
    
            {{ product.name }}
    
        {% endfor %}
    
    {% endfor %}
    

    【讨论】:

      猜你喜欢
      • 2014-05-20
      • 2019-08-17
      • 1970-01-01
      • 2017-05-31
      • 1970-01-01
      • 2014-05-16
      • 2021-02-23
      • 1970-01-01
      • 2019-05-09
      相关资源
      最近更新 更多