Ich versuche, eine kleine Änderung an django lfs Projekt, das mir erlauben, Produkte ohne Bestände zu deaktivieren wird zu machen. Unfortunatelly Ich bin gerade erst anfangen, Python zu lernen, so habe ich große Schwierigkeiten mit seiner Syntax. Das ist, was ich zu tun versuche. Ich verwende die Methode 'is_variant', die tru zurückgibt, wenn mein Produkt ein Untertyp ist. Wenn es eine Variante ist, wende ich mich an das übergeordnete Produkt, erhalte seine aktiven Varianten und überprüfe ihre Bestände. Wenn der Bestand größer als 0 ist, ist die Variable active 0, sonst 1. Wenn nach dem Durchlaufen der Varianten 'active' immer noch 1 ist, setze ich die Variable active des übergeordneten Produkts auf false.
Ich schaffe es irgendwie nicht, dass es auf die richtige Weise funktioniert. Wenn ich :
def deactivate(self):
if self.is_variant():
prod = self.parent
prod.active = all(var.get_stock_amount() != 0 for var in prod.variants.filter(active=True))
else:
prod.active = self.get_stock_amount() != 0
self.parent.save()
Es deaktiviert mein Produkt, egal ob die Varianten Vorrat haben oder nicht. Und wenn ich :
inactive = 0
if self.is_variant():
prod = self.parent
for s in prod.variants.filter(active=True):
if s.get_stock_amount() == 0:
inactive = 1
else:
inactive = 0
if inactive == 1:
prod.active = 0
prod.save()
else:
if self.get_stock_amount() == 0:
self.active = 0
self.save()
Das Gleiche passiert, also wird mein Produkt jedes Mal deaktiviert.
Ich habe die Rückgabetypen in der Shell überprüft, und self ist eine Variante, und sie ist aktiv.