Python 如何在django的queryset中使用If-else
我需要在我的查询集中为Value1使用if-else条件。我在查询集中找到了我记录的平均值。我需要应用这样的条件。如果我的Value1在90和110之间,则我必须将消息显示为“很棒”,如果它低于90,则必须打印为“低”,如果高于140,则必须打印为“高” 我需要在我的html文件上打印这个输出 Models.py:Python 如何在django的queryset中使用If-else,python,django,django-models,Python,Django,Django Models,我需要在我的查询集中为Value1使用if-else条件。我在查询集中找到了我记录的平均值。我需要应用这样的条件。如果我的Value1在90和110之间,则我必须将消息显示为“很棒”,如果它低于90,则必须打印为“低”,如果高于140,则必须打印为“高” 我需要在我的html文件上打印这个输出 Models.py: from django.db import models from django.contrib.auth.models import User class graphinpu
from django.db import models
from django.contrib.auth.models import User
class graphinput(models.Model):
user=models.ForeignKey(User,on_delete=models.CASCADE)
Month = models.CharField(max_length=30)
Value1 = models.IntegerField()
Value2 = models.IntegerField()
URL.py:
def average(request):
userid = None
if request.user.is_authenticated:
userid = request.user.id
print(userid)
dataset = graphinput.objects.filter(user=userid) \
.values('Value1')
a=dataset.aggregate(Sum('Value1'))
b=dataset.aggregate(Avg('Value1'))
print(a)
print(b)
return render(request, 'profile.html')
avg=b.get('Value1\uu avg',0)
如果平均值<90:
消息='低'
否则,如果平均值<110:
信息=‘很好’
其他:
消息='高'
上下文={'message':message}
返回呈现(请求'profile.html',上下文)
接下来使用
{{message}}
在模板中访问它,您可以动态地基于其他列的值创建列:
from django.db.models import Case, Value, When
Graphinput.objects.annotate(
message=Case(
When(value1__lt=90, then=Value('high')),
When(value1__lt=110, then=Value('low')),
When(value1__gt=140, then=Value('great')),
default=Value('not set'),
),
).values_list('value1', 'message')
更多细节。此外,您还应该以大写字母和小写变量开头类名<代码>图形输入和
值1
工作正常!!我在没有获取数据的情况下进行了尝试,因此没有实现..现在我可以知道0(第二个参数)是什么吗?如果“b”中没有Value1\uu avg的值,则默认值为0。这是一个python字典功能。我还有一个疑问..在我的html文件中..如果我的平均值低于90或高于110,我必须添加一个按钮..如果其下注为90-110,我需要显示按钮查看此tq,这很有帮助
from django.db.models import Case, Value, When
Graphinput.objects.annotate(
message=Case(
When(value1__lt=90, then=Value('high')),
When(value1__lt=110, then=Value('low')),
When(value1__gt=140, then=Value('great')),
default=Value('not set'),
),
).values_list('value1', 'message')