我试图在衬衫的产品数据库中创建一些查询。单个表包含所有股票和价格信息(例如,xs_stock,xs_original_price,xs_sale_price)。当客户将产品添加到购物车时,它会节省大小,并且我希望使用变量来进行相应的查询。例如:
size = 'Small'
size_query = 's_original_price'
product.shirtstyle_set.all()[0].size_query
#substitute in 's_original_price' with query, which would work if typed by hand
相反,我得到AttributeError: 'ShirtStyle' object has no attribute 'size_query'
。
我现在知道这不是设置库存数据库的最佳方式,但我想在解决之前弄清楚这一点。提前谢谢。
编辑以添加我的models.py:
class ShirtStyle(models.Model):
shirt = models.ForeignKey(Shirt)
product_id = models.ForeignKey(Product, null=True, blank=True)
pattern = models.CharField(max_length=50, null=False, blank=False)
primary = models.BooleanField(default=False)
xs_stock = models.IntegerField(default=0)
xs_original_price = models.DecimalField(max_digits=8, decimal_places=2, default=1999, blank=False, null=False)
xs_sale_price = models.DecimalField(max_digits=8, decimal_places=2, null=True, blank=True)
s_stock = models.IntegerField(default=0)
s_original_price = models.DecimalField(max_digits=8, decimal_places=2, default=1999, blank=False, null=False)
s_sale_price = models.DecimalField(max_digits=8, decimal_places=2, null=True, blank=True)
m_stock = models.IntegerField(default=0)
m_original_price = models.DecimalField(max_digits=8, decimal_places=2, default=1999, blank=False, null=False)
m_sale_price = models.DecimalField(max_digits=8, decimal_places=2, null=True, blank=True)
l_stock = models.IntegerField(default=0)
l_original_price = models.DecimalField(max_digits=8, decimal_places=2, default=1999, blank=False, null=False)
l_sale_price = models.DecimalField(max_digits=8, decimal_places=2, null=True, blank=True)
xl_stock = models.IntegerField(default=0)
xl_original_price = models.DecimalField(max_digits=8, decimal_places=2, default=1999, blank=False, null=False)
xl_sale_price = models.DecimalField(max_digits=8, decimal_places=2, null=True, blank=True)
答案 0 :(得分:0)
正如您所说,关于您如何构建数据可能存在更深层次的问题,但请尝试以下方法:
尝试product.shirtstyle_set.all()[0][size_query]
答案 1 :(得分:0)
在reddit / r / learnprogramming上得到了回答。完整答案:
但是要回答你的问题,“s_original_price”是对这个问题的反对意见 模型实例,而不是dict中的值(离子)。所以你需要使用 getattr获取模型字段的值:
getattr(product.shirtstyle_set.all()[0], size_query)
而不是:
product.shirtstyle_set.all()[0][size_query]