我有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