【问题标题】:Call object in template after _meta.get_fields()在 _meta.get_fields() 之后调用模板中的对象
【发布时间】:2018-03-01 08:20:30
【问题描述】:

所以我有很多与父模型相关的模型。像这样

class Part(models.Model):
    name = models.CharField(max_length=550)

class Stock(models.Model):
    name = models.CharField(max_length=550)

class StockArea(models.Model):
    area = models.CharField(max_length=550)
    stock = models.ManyToManyField(Stock, related_name='stockarea_stock')

class Si(models.Model):
    name = models.CharField(max_length=50)
    si_unit = models.CharField(max_length=10)

class Quantity(models.Model):
    quantity = models.DecimalField(max_digits=10, decimal_places=2)
    si = models.ManyToManyField(Si, related_name='quantity_si')
    part = models.ManyToManyField(Part, related_name='quantity_part')
    stockarea = models.ManyToManyField(StockArea, related_name='quantity_stockarea')

class Image(models.Model):
    image = models.FileField()
    part = models.ManyToManyField(Part, related_name='image_part')

当我想查看零件的详细视图时,我想显示零件名称、数量、图像、库存区域等。

所以细节视图的视图看起来像这样

def details(request, part_id):
    part = get_object_or_404(Part, pk=part_id)
    part = part._meta.get_fields()
    context = {
        'part': part,
    }
    return render(request, 'part/details.html', context)

在尝试调用模板中的所有内容时出现问题。

我可以通过调用部分来显示对象:{{ part }}

但我希望能够调用零件的名称,例如:{{ part.name }}

我知道这会很麻烦,因为相关字段也称为“名称”。所以我想我可以这样称呼它:{{ part.Part.name }} 或者当我想显示数量时:{{ part:Quantity.quantity }}

没有一个工作。所以我的问题是,如何从对象中调用数据?

谢谢!

【问题讨论】:

    标签: python django django-models django-templates


    【解决方案1】:

    你得到的part 对象是一个模型实例。您可以将其用作模型实例。所以这很有效:

    {% for image_object in part.image_part.all %}
        <img src="{{ image_object.image.url }}" />
    {% endfor %}
    

    也就是说,在你删除这一行之后:

    part = part._meta.get_fields()
    

    没有任何理由这样做。您需要访问 _meta 的情况很少见。

    【讨论】:

    • 这不起作用。当我只写{{ part }} 时,我得到了部分的名称。所以我猜它不是模型实例?
    • 当你写 {{ part }} 时,你调用了 part.__str__()。所以你的模型定义可能有def __str__(self): return self.name
    • 是的,我将它添加到该模型中。在编写您的代码示例时,我仍然没有得到回报。有没有办法查看模型实例包含的内容?
    • 但是你有图片吗? {{ part.image_part }} 应该返回类似“RelatedObjectManager”的内容。 {{ part.image_part.count }} 应该显示附加到零件的图像数量。重申一下:删除我提到的那一行。
    • 不,我只是重命名以明确您获得 Image 对象实例。您的图像模型有一个字段image,这导致我最初犯了错误,因为我忘记引用图像实例的图像字段。
    猜你喜欢
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 2022-10-17
    • 2020-03-26
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    相关资源
    最近更新 更多