【发布时间】:2019-09-08 10:31:54
【问题描述】:
我有一个嵌套的 if 条件来检查条件。我怎样才能最小化代码?我应该怎么做才能缩短代码? 我创建了一个函数,并在函数内部检查用户提供的仪表 ID 并更新数据库中的表。
def updatereport(meterdetails_id, indicator='inr'):
if meterdetails_id == 1:
happycount1 = Report.objects.filter(date = timezone.datetime.today()).values("happycount")
if len(happycount1)<=0:
Report.objects.create(date = timezone.datetime.today(),happycount=0)
else:
if indicator == 'inr':
Report.objects.filter(date=timezone.datetime.today()).update(happycount=happycount1.get()["happycount"]+1)
else:
Report.objects.filter(date=timezone.datetime.today()).update(happycount=happycount1.get()["happycount"] - 1)
elif meterdetails_id == 3:
disappointedcount1 = Report.objects.filter(date = timezone.datetime.today()).values("disappointedcount")
if len(disappointedcount1) <= 0:
Report.objects.create(date=timezone.datetime.today(), disappointedcount=0)
else:
if indicator == 'inr':
Report.objects.filter(date = timezone.datetime.today()).update(disappointedcount = disappointedcount1.get()["disappointedcount"] + 1)
else:
Report.objects.filter(date = timezone.datetime.today()).update(disappointedcount = disappointedcount1.get()["disappointedcount"]-1)
elif meterdetails_id == 2:
depressedcount1 = Report.objects.filter(date = timezone.datetime.today()).values("depressedcount")
if len(depressedcount1) <= 0:
Report.objects.create(date = timezone.datetime.today(), depressedcount=0)
else:
if indicator=='inr':
Report.objects.filter(date = timezone.datetime.today()).update(depressedcount = depressedcount1.get()["depressedcount"] + 1)
else:
Report.objects.filter(date = timezone.datetime.today()).update(depressedcount = depressedcount1.get()["depressedcount"] - 1)
elif meterdetails_id == 5:
okcount1 = Report.objects.filter(date = timezone.datetime.today()).values("okcount")
if len(okcount1) <= 0:
Report.objects.create(date = timezone.datetime.today(), okcount=0)
else:
if indicator =='inr':
Report.objects.filter(date = timezone.datetime.today()).update(okcount = okcount1.get()["okcount"] + 1)
else:
Report.objects.filter(date = timezone.datetime.today()).update(okcount = okcount1.get()["okcount"] - 1)
elif meterdetails_id == 6:
sadcount1 = Report.objects.filter(date = timezone.datetime.today()).values("sadcount")
if len(sadcount1) <= 0:
Report.objects.create(date = timezone.datetime.today(), sadcount=0)
else:
if indicator =='inr':
Report.objects.filter(date = timezone.datetime.today()).update(sadcount = sadcount1.get()["sadcount"] + 1)
else:
Report.objects.filter(date = timezone.datetime.today()).update(sadcount = sadcount1.get()["sadcount"] -1)
elif meterdetails_id == 7:
angrycount1 = Report.objects.filter(date = timezone.datetime.today()).values("angrycount")
if len(angrycount1) <= 0:
Report.objects.create(date = timezone.datetime.today(), angrycount = 0)
else:
if indicator =='inr':
Report.objects.filter(date = timezone.datetime.today()).update(angrycount = angrycount1.get()["angrycount"] + 1)
else:
# print ('here')
Report.objects.filter(date = timezone.datetime.today()).update(angrycount = angrycount1.get()["angrycount"] - 1)
models.py
class Report(models.Model):
happycount=models.IntegerField(default=0,null=True,blank=True)
disappointedcount=models.IntegerField(default=0,null=True,blank=True)
depressedcount=models.IntegerField(default=0,null=True,blank=True)
okcount=models.IntegerField(default=0,null=True,blank=True)
sadcount=models.IntegerField(default=0,null=True,blank=True)
angrycount=models.IntegerField(default=0,null=True,blank=True)
date=models.DateField('date',default=timezone.datetime.today(),null=True,blank=True)
def __unicode__(self):
return '%s' % self.date
ordering = ["date"]
verbose_name = "report"
verbose_name_plural = "reports"
【问题讨论】:
标签: python-2.7 django-rest-framework