我遇到的问题是在“选择”模型中获取选项价格。这是因为,根据同一购物车中还有哪些“选项”,将使用不同的价格生成总价。我需要一个查询集来获取“Option”的价格,如果该选项具有其自身位于同一购物车中的“影响器选项”,则使用该选项的价格,否则只使用选项字段设置的“变化”。
“TempName App”模型由以下内容组成:
一页上可以有许多部分。每个部分都可以包含许多选项,用户稍后可以选择这些选项。所选选项将放入购物车中,用于生成总价。
在Variation模型中,字段选项只告诉我Variation属于哪个选项。但是,在Variation模型中,effector_option字段将由购物车使用。
用户将被允许选择任意数量的选项。然而,根据用户选择的选项,其他选项可能会显示以前选择了effector_option的Variation价格。 Cart App模型包括:
购物车可以包含用户选择的多个“选项”。每个“选择”都有一个价格属性,可以根据购物车中还有哪些其他“选项”,来向用户展示该个别“选项”的价格。
我尝试过:获取所有“选项”的变体。然后循环遍历每个变体,并检查“Variation.effector_option”是否包含在同一“购物车”中。如果是,则显示该价格;否则,显示“Variation.effector_option”为 null/未设置的变体中的价格。
我发现,每个“选择”在购物车中调用了超过 26 次查询。这个数据库模式需要更多的规范化吗?还是对于这个简单的项目已经足够了?
“TempName App”模型由以下内容组成:
class Section(models.Model):
title = models.CharField(max_length=20)
description = models.CharField(max_length=100)
temp = models.ForeignKey(TempName, null=False)
def __str__(self):
return self.title
def get_options(self):
return self.option_set.all()
class Option(models.Model):
name = models.CharField(max_length=120)
section = models.ForeignKey(Section, null=False)
def __str__(self):
return self.name
def get_variations(self):
return self.variation_set.all()
class Variation(models.Model):
name = models.CharField(max_length=60, blank=True, unique=True)
price = models.DecimalField(max_digits=5, decimal_places=2)
option = models.ForeignKey(Option, null=False)
effector_option = models.ForeignKey(Option, null=True, blank=True, related_name='option_effected')
def __str__(self):
return self.name
一页上可以有许多部分。每个部分都可以包含许多选项,用户稍后可以选择这些选项。所选选项将放入购物车中,用于生成总价。
在Variation模型中,字段选项只告诉我Variation属于哪个选项。但是,在Variation模型中,effector_option字段将由购物车使用。
用户将被允许选择任意数量的选项。然而,根据用户选择的选项,其他选项可能会显示以前选择了effector_option的Variation价格。 Cart App模型包括:
class Cart(models.Model):
owner = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True)
creation_date = models.DateTimeField(verbose_name='creation date')
checked_out = models.BooleanField(default=False, verbose_name='checked out')
class Meta:
verbose_name = 'cart'
verbose_name_plural = 'carts'
ordering = ('-creation_date',)
def __str__(self):
return unicode(self.creation_date)
def get_selections(self):
return self.selection_set.all()
class Selection(models.Model):
cart = models.ForeignKey(Cart)
option = models.ForeignKey(Option)
@property
def price(self):
return 10
购物车可以包含用户选择的多个“选项”。每个“选择”都有一个价格属性,可以根据购物车中还有哪些其他“选项”,来向用户展示该个别“选项”的价格。
我尝试过:获取所有“选项”的变体。然后循环遍历每个变体,并检查“Variation.effector_option”是否包含在同一“购物车”中。如果是,则显示该价格;否则,显示“Variation.effector_option”为 null/未设置的变体中的价格。
我发现,每个“选择”在购物车中调用了超过 26 次查询。这个数据库模式需要更多的规范化吗?还是对于这个简单的项目已经足够了?