0

我有一个简单的电子商务网站与产品和变化。Django ManyToMany Field还是别的?

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

由于每个变体可以有不同的权重,并且每个权重都有一个数量,我已经实现了一个带有与变体的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字段的Weight模型设置为Variation,然后数量应该为每个选定的权重下拉。这将允许存储重量和数量的值,并且每种产品在每种情况下都使用相同的值。

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

回答

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) 

然后加入所有的重量,你的权重类需要独立。因此,除了需要为变化表添加权重之后,您可以从Weights类中选择权重,我们已经在其中添加了我们可能需要的权重。

通过这种方式,您可以对不同的变化重复使用相同的重量,甚至不需要重复记录。

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

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

+0

感谢您的回复。这并不能完全解决问题,因为每个重量我都必须设定数量。在上述情况下,每个变化模型实例可以有多个权重,但只能有一个数量,而我也需要基于权重选项的数量。 – Uma

+0

您可以为重量和数量创建两种不同的关系。我已经更新了答案。 – kt14