我有2个表products
和catagories
通过外键连接。 我需要使用领域catagories.price_markup
如下更新场products.new_cost
:Django更新表使用来自另一个表的数据
UPDATE products p
INNER JOIN categories c ON p.category_id = c.id
SET p.new_cost = ROUND(p.pleer_cost * (1 + c.price_markup/100), -1)
WHERE p.update = 1
在SQL它很容易,但如何使用Django ORM办呢?
我的简化的尝试不起作用Cannot resolve keyword 'category.price_markup' into field.
:
Product.actived.select_related('category').filter(update=1)).update(new_cost=F('pleer_cost') * F('category.price_markup'))
错误:'此查询中不允许加入字段引用'。有关它的票据https://code.djangoproject.com/ticket/14104 – Deadly
在这种情况下,请尝试在过滤器和更新之间使用额外的内容,然后在更新中使用额外的字段。类似于Product.activated.select_related('category')。filter(update = 1).extra(select = {'_ new_price':'pleer_cost * category.price_markup'})。update(new_price = _new_price)'。您可能需要稍微调整一下,但这是一般想法。 –
试过了亚历克斯,仍然不会工作它会抱怨说“_new_price”不在现场列表中。 更新功能不关心你选择了哪些字段,它只检查你建模的字段有 – Ramast