我正在实现一个简单的平台销售,该平台的一部分引用插入已设置的许多订单,此订单(Pedido
)与 order_detail(Detalle_Pedido
)相关,而与产品(Producto
)相关,如下所示:
class Pedido(models.Model):
referencia = models.CharField(max_length=255)
cliente = models.ForeignKey(Cliente,related_name="cliente")
fecha_pedido = models.DateField(auto_now=True)
fecha_entrega = models.DateField(auto_now=True)
agencia_envio = models.ForeignKey(Envio, related_name="entrega",blank=True,null=True)
producto = models.ManyToManyField(Producto, through='Detalle_Pedido')
def __unicode__(self):
return self.referencia
class Meta:
ordering = ["referencia","fecha_pedido"]
class Detalle_Pedido(models.Model):
pedido = models.ForeignKey(Pedido, related_name="pedido")
producto = models.ForeignKey(Producto, related_name="producto")
unidad_precio = models.FloatField()
cantidad = models.IntegerField()
descuento = models.FloatField(blank=True)
def __unicode__(self):
return self.producto
class Meta:
ordering = ["producto"]
class Producto(models.Model):
referencia = models.CharField(max_length=30)
nombre = models.CharField(max_length=500)
cantidad = models.IntegerField()
precio_unidad = models.FloatField(blank=True)
cantidad_en_pedido = models.IntegerField(blank=True)
descatalogado = models.BooleanField(blank=True)
proveedor = models.ForeignKey(Proveedor,related_name="proveedor",blank=True,null=True)
categoria = models.ForeignKey(Categoria,related_name="categoria",blank=True,null=True)
imagen = models.ImageField(upload_to="/media/productos", blank=True)
def __unicode__(self):
return self.nombre
class Meta:
ordering = ["nombre","cantidad","precio_unidad","cantidad_en_pedido","descatalogado"]
每次Pedido
创建订单时,Detalle_Pedido
我都必须将每个订单详细信息与新创建的订单相关联,并且在创建每个订单详细信息时都与 a 相关,因此用户可以为订单详细信息设置产品和数量,Producto
我使用的是CreateView
知道这可能与,formsets
但我看到了一些例子,我并没有澄清ManyToManyFields
通过模型使用的事实,在这种情况下,Detalle_Pedido
编辑:
我澄清了一些问题以加深理解,首先Detalle_Pedido
,是的,是订单的项目部分,这就是为什么我将外键目标定义为Pedido
(订单),订单有很多项目,Detalle_Pedido
(订单详细信息)有另一个外键定位到Producto
(产品)以检索产品详细信息,从Pedido
我做了一个ManyToManyField
到,Producto
因为一个订单有一些产品,为此,我设置条款through
说我想存储一些与订单和产品相关的数据,这就是订单详细信息(Detalle_Pedido
),我不知道这是否是更“合法”的方式,但对于我正在尝试做的事情来说是一种小方法,我在 Django 中相对较新,所以我错过了很多东西,任何建议或小费将不胜感激。