Ho 2 tabelle products
e catagories
collegate da chiave esterna. Devo aggiornare campo products.new_cost
utilizzando il campo catagories.price_markup
come segue:Tabella di aggiornamento Django utilizzando i dati da un'altra tabella
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
In SQL è così facile, ma come farlo utilizzando Django ORM?
mia prova semplificata non funziona 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'))
Errore: 'I riferimenti campo aggiunti non sono consentiti in questa query'. Ticket su di esso https://code.djangoproject.com/ticket/14104 – Deadly
In tal caso, provare a utilizzare un extra tra filtro e aggiornamento, quindi utilizzare il campo aggiuntivo nell'aggiornamento. Qualcosa come 'Product.activated.select_related ('category'). Filter (update = 1) .extra (select = {'_ new_price': 'pleer_cost * category.price_markup'}). Update (new_price = _new_price)'. Potrebbe essere necessario regolarlo un po ', ma è l'idea generale. –
Provato Alex, ancora non funzionerà si lamenterà che "_new_price" non è nella lista dei campi. La funzione di aggiornamento non interessa i campi selezionati, controlla solo i campi che il modello ha – Ramast