繁体   English   中英

在 python 中写入清洁器 function,参数可以是集合或值

[英]Writing a cleaner function in python, a parameter to be either a set or a value

I have a struggling with a way of writing this function much cleaner and to make this function for the parameter objs to can be either a QuerySet or an single object, in case when the objs parameter is an set of objects I want to go with the for 循环,但在单个 object 的情况下,我想在不循环的情况下创建日期参数,而且我不确定 try 块是否是检查具有这些信息的 object 是否已经在数据库中的好方法,并且如果不是,我想用这些日期创建它。 任何帮助将不胜感激,谢谢!

function:

def check_recurrent_or_new(user, objs, obj):
    for item in objs:
        if item.created_date.month == 12:
            date = datetime(
                    item.created_date.year + 1, 1, item.created_date.day,
                    item.created_date.hour, item.created_date.minute, item.created_date.second,
                    item.created_date.microsecond
                )
        else:
            date = datetime(
                    item.created_date.year, item.created_date.month + 1, item.created_date.day,
                    item.created_date.hour, item.created_date.minute, item.created_date.second,
                    item.created_date.microsecond
                )
        try:
            obj.objects.get(
                user=user, name=item.name, amount=item.amount,
                created_date=date, category=item.category, recurrent=True
            )
        except:
            obj.objects.create(
                    user=user, name=item.name, amount=item.amount,
                    created_date=date, category=item.category, recurrent=True

试试看,除了你可以直接使用 get_or_create 方法以获取更多信息,请在此处查看

def check_recurrent_or_new(user, objs, obj):
for item in objs:
    test=item.created_date.month == 12
    date = datetime(
                item.created_date.year + 1 if test else item.created_date.year ,1 if test else item.created_date.month + 1, item.created_date.day,
                item.created_date.hour, item.created_date.minute, item.created_date.second,
                item.created_date.microsecond
            )
    obj,created=obj.objects.get_or_create(
            user=user, name=item.name, amount=item.amount,
            created_date=date, category=item.category, recurrent=True
        )
    

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM