我有两个模型,分别是employee和leave,其中Employee
是Leave
中的外键。我想在特定员工登录时在页面上显示他们的请假请求。
我无法获取上填充的休假数据,如果一名员工申请了两次以上的休假,我会收到一条错误消息,指出找到了两项
这是我的密码
models.py
class Employee(models.Model):
user=models.OneToOneField(User, on_delete=models.CASCADE)
no_of_leaves=models.IntegerField(
null=False,
validators=[
MinValueValidator(1),
MaxValueValidator(24)
],
default=24
)
def __str__(self):
return self.user.username
class Leave(models.Model):
employee=models.ForeignKey(Employee,on_delete=models.CASCADE,default="")
start_date=models.DateField(auto_now_add=False)
end_date=models.DateField(auto_now_add=False)
req_date=models.DateTimeField(default=datetime.datetime.now())
STATUS_OPTIONS = (
("Approve","Approve"),
("Pending","Pending"),
("Decline","Decline"),
)
approved=models.CharField(max_length=10,choices=STATUS_OPTIONS,default='Pending')
def __str__(self):
return self.employee.user.username
@property
def date_diff(self):
return (self.start_date - self.end_date).days
views.py
def home(request):
user = request.user
u = User.objects.get(username=user)
e = Employee.objects.get(user=user.id)
leave = Leave.objects.get_or_create(employee=e)
print(leave)
nofleaves=None
if user.is_superuser:
pass
else:
nofleaves=u.employee.no_of_leaves
context={'nofleaves':nofleaves,'leave':leave,}
return render(request,"leaveApp/home.html",context)
这个other question可能会有帮助
问题是您应该只对一个数据使用
get
。您不应该在多对一关系上使用get
。逻辑是Employee
可以有多个Leave
,因此不能一致使用get
您可以使用的是filter,但我会使用related names/related fields,如果您正确定义它,它将允许您使用
employee.leaves
就像@Jao所说的
get
只获取一个数据,而Leave
和Employee
之间存在多对一关系,这意味着一名员工可以有多个假期,因此get
将抛出一个错误您应该使用
filter
:换行
leave = Leave.objects.get_or_create(employee=e)
类似于相关问题 更多 >
编程相关推荐