Mam 2 tabele products
i catagories
połączone kluczem obcym. muszę zaktualizować pole products.new_cost
użyciu pola catagories.price_markup
następująco:Tabela aktualizacji Django przy użyciu danych z innej tabeli
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
W SQL jest to takie proste, ale jak to zrobić używając Django ORM?
Moja uproszczona próba nie działa 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'))
Błąd: "Połączone odwołania do pól nie są dozwolone w tym zapytaniu". Bilet na ten temat https://code.djangoproject.com/ticket/14104 – Deadly
W takim przypadku spróbuj użyć dodatkowego filtru i aktualizacji, a następnie użyj dodatkowego pola w aktualizacji. Coś jak "Product.activated.select_related (" category "). Filter (update = 1) .extra (select = {'_ new_price': 'pleer_cost * category.price_markup'}). Update (new_price = _new_price)'. Być może będziesz musiał trochę go zmienić, ale jest to ogólny pomysł. –
Próbowałem Alex, nadal nie będzie działać, będzie narzekać, że "_new_price" nie znajduje się na liście pól. Funkcja aktualizacji nie dba o to, które pola wybrałeś, sprawdza tylko, które pola są modelowane. – Ramast