0

我有一个简单的电子商务网站,其中包含产品和变体。

每个变体肯定会有不同的权重,每个权重都会有一个数量。

我已经实现了一个权重模型,它与变体的 ForeignKey 关系,因为每个变体可以有不同的权重,每个权重都有一个数量。

class Weight(models.Model):
    variation = models.ForeignKey(Variation)
    size = models.DecimalField(decimal_places=3, max_digits=8, 
                            validators=[MinValueValidator(Decimal('0.10'))])
    quantity = models.PositiveIntegerField(null=True, blank=True, help_text="Select Quantity for this size") 

我将权重添加为内联,并且可以在变体中添加多个权重值和数量。请看这个http://imgur.com/XLM6sQJ

有人可能认为这可以通过为每个重量创建变化来实现,但由于每个产品肯定会有不同的重量,因此无需为每个重量创建变化。

现在我面临的问题是每个变体都有不同的重量,例如,一个变体的重量可能是 1 磅、2 磅、3 磅。这些中的每一个都将为每个变化创建新的权重对象。这意味着如果另一个变体的重量也为 1 磅、2 磅、3 磅,则会创建新对象,而不是重用现有对象。这将导致一个巨大的数据库表,其中包含许多重复的权重值。这是一个问题,因为任何产品所需的重量和数量值都是有限的(重量 = 1 磅到 100 磅,数量 = 1 到 100),因此理想情况下应该重复使用这些值。

为避免这种情况,我正在考虑将带有 ManyToMany 字段的权重模型设置为 Variation,然后数量应该是每个选定权重的下拉列表。这将允许存储重量和数量的值,并让每个产品在每个实例中使用相同的值。

我遇到的问题是:
1.这是正确的方法吗?
2.如果不是,最好的方法是什么?
3.如果这是正确的做法怎么办?
4. 如果这是正确的方法,我如何在管理站点中显示它,因为每个重量也应该有一个数量(我不知道如何做到这一点)?
5. 有没有更好的方法来实现这一点,如果有,怎么做?

4

1 回答 1

0

你对你想怎么做有一个清晰的认识。

我同意你关于为不同的变化重用相同的权重,而不是创建再次具有相同权重的新权重。这就是我认为更好的方法,可能有多种方法可以做到这一点。

要回答您的问题,请在您的应用中尝试此模型关系:

 class Quantity(models.Model):
     quantity = models.PositiveIntegerField()

 class Weight(models.Model):
     weight = models.PositiveIntegerField()
     quantity = models.ManyToManyField(Quantity)


 class Variation(models.Model):
     name = models.CharField()
     weight = models.ManyToManyField(Weight)

然后在权重类中分别添加您需要的所有权重。因此,在您需要向 Variation 表添加一些权重之后,您可以从 Weights 类中选择权重,我们已经在其中添加了我们可能需要的权重。

通过这种方式,您可以为不同的变化重用相同的权重,甚至不必有重复的记录。

确保您已在管理员中注册这两个模型以便于访问。

这应该可以解决您在权重表中有多个记录的问题。

于 2016-08-07T15:46:09.350 回答