一方面,我有三个CollectionsView(从服务器获取三种类型的模型),另一方面,我有四分之一的CollectionView,就像一个购物车。这将存储与视图关联的其他三个集合中的项目(集合视图)。
问题是当我添加一个具有相同ID的项目时,这个项目被编辑,而不是添加到购物车CollectionView。
示例:
function addToCart(model){
ShoppingCartCollectionView.collection.add(model);
}
来自其他系列:
// From one CollectionView
addToCart(this.model);
// From another CollectionView
addToCart(this.model);
此集合具有相同的ID,因为它们存储在服务器上的不同数据库中。
这是我的模型(Python ORM)
PRODUCT_TYPE = (
('EM', 'Empanada'),
('BE', 'Bebida'),
('OF', 'Oferta'),
)
# Create your models here.
class Producto(models.Model):
nombre = models.CharField(max_length=50)
precio_unidad = models.DecimalField(max_digits=8, decimal_places=2)
descripcion = models.TextField()
stock = models.IntegerField()
status = models.BooleanField(default=True)
imagen = models.ImageField(upload_to=upload_to)
fecha_publicacion = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
class Empanada(Producto):
precio_docena = models.DecimalField(max_digits=8, decimal_places=2)
product_type = models.CharField(max_length=2, choices=PRODUCT_TYPE, default='EM', editable=False)
def __unicode__(self):
return self.nombre
class Bebida(Producto):
product_type = models.CharField(max_length=2, choices=PRODUCT_TYPE, default='BE', editable=False)
def __unicode__(self):
return self.nombre
class Oferta(Producto):
product_type = models.CharField(max_length=2, choices=PRODUCT_TYPE, default='OF', editable=False)
def __unicode__(self):
return self.nombre
class Venta(models.Model):
pedido = models.TextField()
total = models.DecimalField(max_digits=8, decimal_places=2)
status = models.BooleanField(default=True)
fecha_publicacion = models.DateTimeField(auto_now_add=True)
如何解决这个问题?
感谢!!!
答案 0 :(得分:0)
@KimGysen正在考虑重组您的产品表。从长远来看,使用相同id
的不同产品会给您带来问题。这是一个可能适合您的数据库架构。
首先,您有一个产品名称表,您可以在其中列出不同产品的名称,并为每种产品类型指定主键(ID)。然后,对产品的不同属性进行分组,并为每个组创建单独的表。在表格中,您可以通过ID(这是您的外键)来引用原始产品类型。这是一个简单的图表:
/*Name Table Prod Type 1
------------------------------- ---------------------------------
| ID | Product Name | Prod Type | ProdId | attr1 | ... | attrN |
------------------------------- ---------------------------------
| 1 | Product 1 | 1 | | 1 | val1 | ... | valN |
------------------------------- ---------------------------------*/
collection.set
您的另一个选择是覆盖Backbone中的collection.set
方法,该方法负责识别您的集合中是否存在重复项。
collection.set
如果您遇到问题,因为您添加两种具有相同ID的不同类型的产品,可以通过确保collection.set
属性被称为id
以外的其他内容来欺骗id
(这是用于评估集合中是否必须使用相同模型的集合,除非您通过在模型定义中设置idAttribute
属性来指示它检查其他属性。然后collection.set
将不知道如何匹配传入的模型。
collection.set
如果您遇到问题,因为collection.set
未存储您的收藏中已有的模型,则您必须覆盖collection.set
。如果这是你正在寻找的解决方案,请告诉我,我会在这里发布答案。
ShoppingCart
模型第三种可能性是拥有一个处理模型添加和删除的ShoppingCart模型。这是一个更复杂的解决方案。如果您提供有关如何使用购物车的更多详细信息,我可以就如何开始使用提供一些想法。