owc*_*wca 2 python django django-models
我试图对django lfs项目做一个小修改,这将允许我停用没有股票的产品.不幸的是,我刚开始学习python,所以我的语法很麻烦.这就是我想要做的.如果我的产品是子类型,我正在使用方法'is_variant'返回tru.如果它是一个变种我转向母产品,得到它的活跃变种并检查他们的股票.如果stock大于0,则变量active为0,否则为1.如果在循环变量'active'后仍为1,则将parent product的active设置为false.
我不知何故不能使它正常工作.使用时:
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()
Run Code Online (Sandbox Code Playgroud)
它会停用我的产品,无论它的变体是否有库存.使用时:
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()
Run Code Online (Sandbox Code Playgroud)
同样的情况发生,所以我的产品每次都被停用.
我已经检查了shell中的返回类型,self是一个变体,它是活动的.
首先,我不会调用列表set,因为这是一个Python内置方法(请参阅参考资料set).append在列表中使用(您的语法不正确,您明确告诉您的错误;))并且您必须在以下情况下初始化列表:
def deactivate(self):
"""If there are no stocks, deactivate the product. Used in last step of checkout.
"""
if self.has_variants():
sets = []
for s in self.variants.filter(active=True):
sets.append(s)
for var in sets:
...
Run Code Online (Sandbox Code Playgroud)
但是,为什么事先创建一个列表,如果唯一的目的是再次迭代它?你可以这样做:
def deactivate(self):
"""If there are no stocks, deactivate the product. Used in last step of checkout.
"""
if self.has_variants():
for s in self.variants.filter(active=True):
if s.get_stock_amount() == 0:
inactive = True
else:
inactive = False
else:
...
Run Code Online (Sandbox Code Playgroud)
了解更多关于列表.
| 归档时间: |
|
| 查看次数: |
276 次 |
| 最近记录: |