在Django中的ManyToManyField中显示多个实例

时间:2013-08-07 20:34:21

标签: python django

以下是我在图片中的内容:

我想展示我用绿色着色的东西。基本上我想展示每个产品的成本。对于鲍勃来说,他花费12010美元,而吉尔花费12010美元,总价24020美元。

到目前为止,这是我的代码:

class PurchaseOrder(models.Model):
    product = models.ManyToManyField('Product', null =True)

    def get_products(self):
        return "<BR> </BR>".join([p.products for p in self.product.all()])
    get_products.allow_tags = True

class Product(models.Model):
    products = models.CharField(max_length=256, null =True)
    price_for_each_item = models.FloatField() #Here is what I want to be displayed as green

我该怎么做?请注意,每个产品都有一个新行。因此,我试图将每个单独的项目与该单项项目的价格放在同一行。例如,这是

鲍勃$ 12010.0

吉尔$ 12010.0

1 个答案:

答案 0 :(得分:0)

您可以使用字符串连接将名称与价格连接起来。如果products应该是字符串的第一部分而price_for_each_item是第二部分,请使用:

def get_products(self):
    return "<br />".join("%s %s" % (p.products, p.price_for_each_item) for p in self.product.all())

一些不相关的评论:
请注意,根据XHTML标准(以及HTML标准推荐),没有任何实际内容的标记(例如<br>标记)应该是自动关闭的(因此<br />代替<br> </br> })。

此外,删除连接函数内的方括号将创建生成器而不是列表。这不会在内存中创建(无用的)中间列表,并且该过程会稍微快一些。我认为这是一个很好的习惯,如果您不得不使用大型列表,那么内存需求就会减少。

另一方面,null=TrueManyToManyField没有任何作用。 null=True删除数据库级别的NOT NULL子句,但m2m关系完全保存在单独的表中。如果模型在m2m关系中没有相关模型,则m2m表中根本没有记录。