Tengo 2 tablas products
y catagories
conectadas por clave externa. necesito actualizar campo products.new_cost
utilizando el campo catagories.price_markup
de la siguiente manera:Tabla de actualización Django usando datos de otra tabla
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
En SQL es tan fácil, pero la manera de hacerlo utilizando Django ORM?
Mi intento simplificado no funciona 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'))
Error: 'Las referencias de campo unidas no están permitidas en esta consulta'. Ticket about it https://code.djangoproject.com/ticket/14104 – Deadly
En ese caso, intente utilizar un extra entre el filtro y la actualización, y luego use el campo adicional en su actualización. Algo así como 'Product.activated.select_related ('category'). Filter (update = 1) .extra (select = {'_ new_price': 'pleer_cost * category.price_markup'}). Update (new_price = _new_price)'. Puede que necesite ajustarlo un poco, pero es la idea general. –
Lo intentó Alex, todavía no funciona, se quejará de que "_new_price" no está en la lista de campos. función de actualización no importa qué campos ha seleccionado, solo verifica qué campos tiene – Ramast