在python中的列表上工作

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是一个变体,它是活动的.

Fel*_*ing 8

首先,我不会调用列表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)

了解更多关于列表.

  • @owca:Python的文档非常棒,花20分钟查看它可以节省数小时的时间 (2认同)