如何编写函数/定义以便在 HTML 模板 Django 中呈现?
Posted
技术标签:
【中文标题】如何编写函数/定义以便在 HTML 模板 Django 中呈现?【英文标题】:How to write functions/definitions such that to render in HTML templates Django? 【发布时间】:2018-08-28 11:15:19 【问题描述】:models.py
from django.db import models
from django.contrib.auth.models import User
CHOICES = (('Earned Leave','Earned Leave'),('Casual Leave','Casual Leave'),('Sick Leave','Sick Leave'),('Paid Leave','Paid Leave'))
class Leave(models.Model):
employee_ID = models.CharField(max_length = 20)
name = models.CharField(max_length = 50)
user = models.ForeignKey(User, on_delete = models.CASCADE, null =True)
type_of_leave = models.CharField(max_length = 15, choices = CHOICES)
from_date = models.DateField()
to_date = models.DateField()
)
def __str__(self):
return self.name
views.py
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from .forms import LeaveRequestForm
from django.shortcuts import render_to_response
from .models import Leave
...
def leaveRequest(request):
form_class = LeaveRequestForm
if request.method == "POST":
form = LeaveRequestForm(request.POST)
if form.is_valid():
leave = form.save(commit = False)
leave.user = request.user
form.save()
return HttpResponseRedirect("/thanks/")
else:
return auto_fill_form(request)
def leaves_sick(request):
data = Leave.objects.filter(employee_ID = request.user.username)
sl = "sg"
for obj in data:
if obj.type_of_leave == 'Sick Leave':
sl += obj.date_diff
return render(request, "status.html",'sl':data)
forms.py
from django.forms import ModelForm, Textarea, DateInput
from lrequests.models import Leave
class LeaveRequestForm(ModelForm):
class Meta:
fields = ("name", "type_of_leave", "from_date", "to_date")
model = Leave
urls.py
from django.urls import path, include
from . import views
app_name='lrequests'
urlpatterns = [
path('lrequests/',views.leaveRequest, name = 'request'),
path('status/', views.get_data, name = 'status'),
path('status/', views.leaves_sick, name = 'sick'),
]
基本上,这是一个适用于员工出勤、休假类型等的函数。如果员工请求休假类型为“el”(带薪休假),我需要返回他过去有多少次从数据库请求获得的假期(假设数据库中有多个用户的请求)
我正在开发“休假管理系统”。我需要知道用户请求休假的次数。最初,用户使用 ModelForms 向管理员发送请假申请表。有诸如“earned_leave”、....等休假类型。现在我需要检索数据,员工在“earned_leave”、“paid_leave”等方面申请了多少次休假,并在模板中反映该数字。
*更新-我使用的是默认的 dbsqlite3 数据库。
def leave_count(request):
queryset = Leave.objects.filter(employee_ID = request.user.username, type_of_leave = 'Sick Leave')
return render(request, "history.html", 'queryset' : queryset)
因为,我不知道如何查询我放在views.py 中的数据库。没用。
【问题讨论】:
customtemplatetags
可能就是您想要的。
@serbia99 你能给我举个例子吗,我试过了,但失败得很惨。
你是什么意思“我想声明一个名为'el'的局部变量,从而在每次调用时增加它”?
@brunodesthuilliers 喜欢不将el
声明为变量,如何增加呢?
@Jose 这没有任何意义——没有变量就不能增加变量。这并没有回答这个问题:“每次调用时增加它”是什么意思?
【参考方案1】:
现在我需要检索数据,员工在“earned_leave”中申请休假的次数
request.user.leave_set.filter(type_of_leave="Earned leave").count()
“paid_leave”等
如果您想在单个 SQL 查询中检索每种休假类型的计数:
from django.db.models import Count
queryset = request.user.leave_set.values("type_of_leave").annotate(count=Count("type_of_leave")).order_by("type_of_leave")
for item in queryset:
print("type_of_leave: count".format(**item))
如何将变量(无论它是什么类型)传递给模板已经有很好的文档记录,所以我不会在这里举个例子。
【讨论】:
对不起,我在哪里包含此代码?我已经把它放在我的views.py中,带有一个def名称并用url映射它。它没有用,我对models.py做了同样的事情。没有结果。leave_set
是一个对象吗?
@Jose 很抱歉,但 SO 不能替代阅读文档和学习使用 Python 和 Django。所有这些都被广泛记录,并且也不乏教程。【参考方案2】:
你可以在模型中解决这个问题:
在您的 Leave
中 - 您将 users
作为外键。在用户端 - 在模型中,您实际上可以编写:
def get_el(self):
el = 0
for x in self.Leave.iterator():
if x.type_of_leave == 'earned_leave':
el++
return el
在您的模板中 - 您实际上可以编写 user.get_el
来渲染叶子。
您需要使用一些名为 "related_name" 的概念。此外,您需要适当地扩展您的 User 模型。
祝你好运!
【讨论】:
你有一个 SQL 数据库,而不是一个比特桶。 SQL 数据库知道如何计算项目等... @brunodesthuilliers 我有 dbsqlite3 数据库。以上是关于如何编写函数/定义以便在 HTML 模板 Django 中呈现?的主要内容,如果未能解决你的问题,请参考以下文章
如何将我的 def clean_slug 函数包含到我的视图或模板中,以便它可以工作并显示“title alr exists”