【问题标题】:Can I use filter not using object.filter python我可以使用过滤器而不使用 object.filter python
【发布时间】:2015-08-05 08:03:33
【问题描述】:

我总是在Question.objects.filter() 中使用过滤器 但是这一次,我想使用过滤器从一个类中获取值,例如:

class Expense():
    amount = ''
    currency = ''
    date = '' 

这是我的方法:

def get_expense_list(self, taskId):
    #get expense list
    self.expenseList = [Expense()]
    # get all activity from task 
    self.activiytList = Activity.objects.filter(task_id=taskId)

    for activity in self.activiytList:
        try:    
            self.expenseList.filter(currency=activity.expense_currency, self.expenseList)
            self.expenseList.amount = self.expenseList.expense.amount + activity.expense
        except:
            newExpense = Expense()
            newExpense.currency = activity.currency
            newExpense.amount = activity.amount
            newExpense.date = activity.date
            self.expenseList.append(newExpense)

我正在从活动列表创建费用列表。在activity.model 中,有以下对象:

amount =  models.DecimalField(max_digits=16, decimal_places=2)
currency =  models.CharField(max_length=5)
date = models.DateField()

我想在费用清单中显示如果他们的货币和日期相同,金额将添加,如果没有现有日期和货币,它将append()

请帮帮我。

【问题讨论】:

    标签: python django list


    【解决方案1】:

    列表中没有filter()方法,所以你写的代码无效。

    所以,忽略你的代码,如果你想要的是:

    我想在费用清单中显示,如果他们的货币和日期相同,金额将添加,如果没有现有日期和货币,它将 append()。

    那么你会想按照以下方式做一些事情:

    def get_expense_list(self, taskId):
        self.expenseList = []
        self.activityList = Activity.objects.filter(task_id=taskId)
    
        for activity in self.activityList:
            # all existing expenses for this currency and date
            comparisonFunc = lambda x: x.currency == activity.currency and x.date == activity.date
            expenses = filter(comparisonFunc, self.expenseList)
    
            # if there are no expenses, create a new
            if len(expenses) == 0:
                expense = Expense()
                expense.amount = activity.amount
                expense.date = activity.date
                expense.currency = activity.currency
                self.expenseList.append(expense)
            # otherwise, increase the amount for expenses that were matching
            else:
                for expense in expenses:
                    expense.amount += activity.amount
    

    您也可以通过聚合在数据库中完成所有这些操作。

    【讨论】:

    • 嗨,非常感谢您理解我想要展示的内容。我实际上尝试运行它并收到此错误消息“'filter' 类型的对象没有 len()”。非常感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2014-06-30
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    相关资源
    最近更新 更多