[英]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.