使用变量来完成Django查询返回'对象没有属性'

时间:2014-07-29 02:15:02

标签: django django-models django-orm

我试图在衬衫的产品数据库中创建一些查询。单个表包含所有股票和价格信息(例如,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)

2 个答案:

答案 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]