将日期字段引用设置为Django中的外键字段

时间:2013-08-18 12:24:29

标签: django django-views django-generic-views

我有如下:

class FacturasMonthArchiveView(MonthArchiveView):
   queryset = Factura.objects.all()
   date_field = "pedido__fecha_pedido"
   make_object_list = True
   allow_future = True
   template_name = 'ventas/facturas.html'
   context_object_name = 'facturas_list'

我在表pedido中有一个字段Factura,它引用了包含许多信息的订单,其中一个字段是fecha_pedido,我希望将其用于通用视图{{ 1}},把它放在MonthArchiveView不起作用你怎么看它所以我不知道我怎么能这样做,任何想法?

问候!

使用两个模型进行编辑:

Pedido

pedido__fecha_pedido

Factura

class Pedido(models.Model):
    referencia = models.CharField(max_length=255)
    cliente = models.ForeignKey(Cliente,related_name="cliente",on_delete=models.PROTECT)
    fecha_pedido = models.DateField()
    fecha_entrega = models.DateField()
    agencia_envio = models.ForeignKey(Envio, related_name="entrega",blank=True,null=True)
    producto = models.ManyToManyField(Producto, through='Detalle_Pedido')
    pendiente_de_factura = models.BooleanField(default=False)

    def __unicode__(self):
            return self.referencia

    def save(self, *args, **kwargs):
        super(Pedido, self).save(*args,**kwargs)

    class Meta:
        ordering = ["referencia","fecha_pedido"]

编辑:回溯错误

class Factura(models.Model):
    iva = models.FloatField(default=0.0)
    pedido = models.ForeignKey(Pedido, related_name="pedido_factura")

    def __unicode__(self):
        return "Factura -> ",self.pedido.referencia

    def save(self, *args, **kwargs):
        super(Detalle_Pedido, self).save(*args,**kwargs)

    class Meta:
        ordering = ["pedido"]

1 个答案:

答案 0 :(得分:0)

原因是默认方法_make_date_lookup_arg使用

model._meta.get_field(self.get_date_field())

检查模型字段,这就是为什么你可能会得到" FieldDoesNotExist"。

您可以覆盖" _make_date_lookup_arg"方法,以便视图类看起来像这样:

class FacturasMonthArchiveView(MonthArchiveView):
    queryset = Factura.objects.all()
    date_field = "pedido__fecha_pedido"
    make_object_list = True
    allow_future = True
    template_name = 'ventas/facturas.html'
    context_object_name = 'facturas_list'

    def _make_date_lookup_arg(self, value):
        return value

虽然我不知道这将如何影响代码的其余部分。