Queryset:按订单中的附件返回说明(Django)

Queryset:按订单中的附件返回说明(Django),django,django-templates,Django,Django Templates,考虑下一个例子: class Vehicle(models.Model): vehicle = models.CharField(_('veículo'), max_length=50, unique=True) price = models.DecimalField(_(u'preço'), max_digits=8, decimal_places=2) kit_fabric = models.ForeignKey( "Kit", verbose_nam

考虑下一个例子:

class Vehicle(models.Model):
    vehicle = models.CharField(_('veículo'), max_length=50, unique=True)
    price = models.DecimalField(_(u'preço'), max_digits=8, decimal_places=2)
    kit_fabric = models.ForeignKey(
        "Kit", verbose_name=u'kit de fábrica', related_name='vehicle_kit')


class Accessory(models.Model):
    accessory = models.CharField(_(u'accessório'), max_length=50)
    price_accessory = models.DecimalField(
        _(u'preço'), max_digits=8, decimal_places=2)


class Kit(models.Model):
    kit = models.CharField(max_length=50)


class KitDetail(models.Model):
    kit = models.ForeignKey("Kit", verbose_name='kit', related_name='kit_det')
    accessory = models.ForeignKey(
        "Accessory", verbose_name=u'accessório', related_name='accessory_kit')
    quantity_accessory = models.PositiveIntegerField(_('quantidade'))

    def __str__(self):
        return str(self.kit)


class Ordered(TimeStampedModel):
    customer = models.ForeignKey("Customer", verbose_name='cliente')
    employee = models.ForeignKey("Employee", verbose_name=u'funcionário')
    vehicle = models.ForeignKey("Vehicle", verbose_name=u'veículo')
    kit_optional = models.ForeignKey("Kit", verbose_name='kit opcional')
    dealership = models.ForeignKey(
        "Dealership", verbose_name=u'concessionária')
    kiosk = models.ForeignKey("Kiosk", verbose_name='quiosque')
    status = models.CharField(max_length=2, choices=status_list, default='p')
如何在订单中按附件返回描述

也就是说,在我的模板中,我需要:

{{ object.kit_optional.accessory }}
{{ object.kit_optional.price_accessory }}
{{ object.kit_optional.quantity_accessory }}
否则,我尝试其他代码,但不工作

我试着

$。/manage.py shell
>>>从new_way.core.models导入订购、客户、KitDetail
>>>已订购。套件\可选。套件\详细信息全部()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
NameError:未定义名称“ordered”
>>>已订购。套件\可选。套件\详细信息全部()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:“ReverseSingleRelatedObjectDescriptor”对象没有属性“kit_det”
但不是工作


我不说怎么做。

ForeignKey的每个定义都添加了一个反向关系,可以使用
相关的\u name
来访问它(默认情况下,它是
$model\u name\u lowercase$\u set
)。因此,您可以使用以下代码访问所需的对象:

ordered.kit_optional.kit_det.all() # Returns all KitDetail objects, related to oredered.kit_optional
您可以对其进行迭代,并为每个
KitDetail
检索相关的
附件
对象集:

{% for kit_detail in ordered.kit_optional.kit_det.all %}
    {{ kit_detail.quantity_accessory }}
    {% for accessory in kit_detail.accessory_kit.all %}
        {{ accessory.accessory }}
        {{ accessory.price_accessory }}
    {% endfor %}
{% endfor %}

只是澄清一下:您有一个订购的
对象,您想从
附件
模型中检索
附件
价格(附件
字段,从
附件
模型中检索
数量(附件
字段?请注意,
kitdeail
Kit
模型有多对一关系,因此,每个
Kit
对象可能有多个
kitdeail
对象(与
附件
模型相同)。@很快你有什么建议我再次编辑我的问题,请参阅
shell
中的try code,你以前没有和Django一起工作过。你可以试着阅读。提示:您可以使用
ModelName.objects.first()
访问模型的第一个对象,有时我会忘记基本知识;)
{% for kit_detail in ordered.kit_optional.kit_det.all %}
    {{ kit_detail.quantity_accessory }}
    {% for accessory in kit_detail.accessory_kit.all %}
        {{ accessory.accessory }}
        {{ accessory.price_accessory }}
    {% endfor %}
{% endfor %}