Django ManyToMany Field还是别的什么?

时间:2016-08-07 09:39:45

标签: django django-models django-admin django-admin-filters django-admin-tools

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

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

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

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磅的权重,则创建新对象而不重用现有对象。这将导致一个巨大的db表,其中包含许多重复的权重值。这是一个问题,因为任何产品所需的重量和数量值都是有限的(重量= 1磅到100磅,数量= 1到100),因此理想情况下应重复使用。

为了避免这种情况,我想将具有ManyToMany字段的Weight模型设置为Variation,然后为每个选定的权重下拉数量。这将允许存储重量和数量的值,并使每个产品在每个实例中使用相同的值。

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

1 个答案:

答案 0 :(得分: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类中单独添加所有权重。因此,在您需要为Variation表添加一些权重之后,您可以从Weights类中选择我们已经添加了我们可能需要的权重的权重。

通过这种方式,您可以为不同的变体重复使用相同的权重,甚至无需重复记录。

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

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