访问数据 ManyToMany django 模板



我尝试显示产品--->子类别--->菜单类别。我使用context_processor来显示所有类别和子菜单。我需要根据类别和子类别获取产品我只能在对象上显示django.db.models.fields.related.ManyRelatedManager....

class Categorias(models.Model):
nome_categoria = models.CharField(max_length=100)
class Subcategoria(models.Model):
nome_subcategoria = models.CharField(max_length=100)    
class Product(models.Model):
categoria = models.ManyToManyField('Categorias')
subcategoria = models.ManyToManyField('Subcategoria')

context.py

def menu(request):
    return {'menucategoria': Categorias.objects.all(),}
def submenu(request):
return {'submenu': Subcategoria.objects.all(),}

菜单.html

{% for c in menucategoria %} 
    <ul>
        <li class="block">
            <input type="checkbox" name="item" id="{{c.id}}" />   
            <label for="{{c.id}}">{{c}}</label>
            <ul class="options">
            {% for p in produtos.subcategoria.all %}                 
                <li><a href="">{{p}}</a></li>    
            {% endfor %}
            </ul>
        </li>
    </ul>
{% endfor %}
{% for p in produtos.subcategoria.all %}  

在 Python 中,你会得到一个TypeError: 'Manager' object is not iterable异常,但在模板中,如果静默失败......


还有一些调整要做...你似乎弄错了related_name.相关名称用于反转关系,而不是遵循关系。所以可能这就是你所追求的:

class Categoria(models.Model):  # singular!
    nome_categoria = models.CharField(max_length=100)
class Subcategoria(models.Model):
    nome_subcategoria = models.CharField(max_length=100)    
class Product(models.Model):
    # using ForeignKey instead of ManyToMany. Guessed so because "categoria" is singular, right?
    categoria = models.ForeignKey('Categoria', related_name='produtos')  # plural in related_name, and "products" not "category"
    subcategoria = models.ForeignKey('Subcategoria', related_name='produtos')  # plural in related_name, and "products" not "category"

现在你可以做这样的事情:

{% for p in categoria.produtos.all %}
    somestuff...
    {% for sc in p.subcategoria.all %}
    somemorestuff...

附言

您可以完全省略related_name。将使用默认的相关名称:在本例中product_set

最新更新