如何迭代到 Django 关系一对多的列表
Posted
技术标签:
【中文标题】如何迭代到 Django 关系一对多的列表【英文标题】:How to iterate into a list on django relation one-to-many 【发布时间】:2016-06-05 22:16:58 【问题描述】:我是这个论坛和 django 的新手。 我使用的是 Python 2.7 环境。
我有以下models.py:
class Categoria(models.Model):
DEFAULT_CATHEGORY = 0
nome = models.CharField(max_length=255, null=False, default='0')
def __unicode__(self):
return self.nome
class Produto(models.Model):
nome = models.CharField(max_length=255, null=False)
pontos_na_compra = models.DecimalField(decimal_places=4, max_digits=10, default=0)
pontos_na_troca = models.DecimalField(decimal_places=4, max_digits=10, default=0)
foto = models.ImageField(upload_to=get_image_path, blank=True, null=True)
categoria = models.ForeignKey(
Categoria,
default=Categoria.DEFAULT_CATHEGORY
)
def __unicode__(self):
return "%s, %s" % (self.nome, self.codigo_depara)
我想要这种关系:每个类别(cathegory)都有很多 Produto(产品)。在模型中是否正确? 我在 views.py 上没有任何与之相关的内容。
我想在 html 文件中做一些这样的代码:
show CATEGORIA.nome
for each PRODUTO in LIST OF PRODUCTS IN CATEGORIA do:
show PRODUTO.nome
show PRODUTO.pontos_na_compra
show PRODUTO.foto
end-for
我尝试使用
% if categorias %
<ul id="flexisel">
% for categoria in produto.categoria_set() %
<li>
# SHOW ALL HERE. HOW?
</li>
% endfor %
</ul>
% else %
<p id="flexise">
Nenhum produto encontrado!
</p>
% endif %
但是它没有找到 categoria_set() 方法并返回这个:
无法解析余数:来自“produto.categoria_set()”的“()”
请求方法:GET 请求网址:http://127.0.0.1:8000/ Django 版本:1.9.2 异常类型:TemplateSyntaxError 异常值:
无法解析余数:来自“produto.categoria_set()”的“()”
异常位置:/home/dsbonafe/.virtualenvs/bruno/local/lib/python2.7/site-packages/django/template/base.py 在解析中,第 516 行 Python 可执行文件:/home/dsbonafe/.virtualenvs/bruno/bin/python Python版本:2.7.6 Python 路径:
['/home/dsbonafe/Documentos/Projetos/Bruno Mercado/bruno/redewebsite', '/home/dsbonafe/.virtualenvs/bruno/lib/python2.7', '/home/dsbonafe/.virtualenvs/bruno/lib/python2.7/plat-x86_64-linux-gnu', '/home/dsbonafe/.virtualenvs/bruno/lib/python2.7/lib-tk', '/home/dsbonafe/.virtualenvs/bruno/lib/python2.7/lib-old', '/home/dsbonafe/.virtualenvs/bruno/lib/python2.7/lib-dynload', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/home/dsbonafe/.virtualenvs/bruno/local/lib/python2.7/site-packages', '/home/dsbonafe/.virtualenvs/bruno/lib/python2.7/site-packages']
服务器时间:Ter, 23 Fev 2016 20:55:39 +0000
有人可以帮助我吗?
非常感谢。
【问题讨论】:
我误读了你的问题。你似乎自相矛盾。在您的解释中,您说您希望一个类别拥有许多产品。在您的模板代码中,您进行查找:produto.categoria_set
。那是相反的。你打算哪一个?你的模板代码错了吗?我可以更新我的答案。
其实我还没有看懂categoria_set。下面的答案,告诉我发生了什么。
【参考方案1】:
您的模型在我看来是正确的。我看到了几个潜在的问题。
根据您的模板引擎,您可能必须删除括号。我认为 Jinja2 使用它们,但 Django 模板语言没有。我认为,根据错误消息,您使用的是后者(DTL)。
您可能只需要在produto.categoria_set
上调用all
方法。我很确定categoria_set
是一种经理对象。你需要一个QuerySet,调用all
时会返回。
您应该尝试以下方法:
% for categoria in produto.categoria_set.all %
# SHOW ALL HERE. HOW?
% endfor %
注意:这个答案目前在不断变化,因为原来的问题自相矛盾。
【讨论】:
以上是关于如何迭代到 Django 关系一对多的列表的主要内容,如果未能解决你的问题,请参考以下文章