在_meta.get_fields()

时间:2017-09-20 10:09:15

标签: python django django-models django-templates

所以我有很多与父模型有关系的模型。喜欢这个

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')

当我想要一个零件的详细视图时,我想显示零件名称,数量,图像,股票区等。

因此viw在详细视图中看起来像这样

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 }}

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

也就是说,删除此行后:

part = part._meta.get_fields()

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