Python 使用相关_名称返回queryset在django中不工作?
这里我使用两个模型。两个模型都与Python 使用相关_名称返回queryset在django中不工作?,python,django,django-views,foreign-keys,Python,Django,Django Views,Foreign Keys,这里我使用两个模型。两个模型都与用户模型有ForeignKey关系。在这里我想查询员工,由审核和发送,我试着这样做。当我进行筛选时,它返回queryset,但当我使用related\u name进行查询时,它会抛出AttributeError 我该怎么做 `异常值: “Leave”对象没有“Review\u by”属性 models.py class Leave(models.Model): staff = models.ForeignKey(get_user_model(),on_de
用户
模型有ForeignKey
关系。在这里我想查询员工
,由
审核和发送,我试着这样做。当我进行筛选时,它返回queryset,但当我使用related\u name
进行查询时,它会抛出AttributeError
我该怎么做
`异常值:
“Leave”对象没有“Review\u by”属性
models.py
class Leave(models.Model):
staff = models.ForeignKey(get_user_model(),on_delete=models.CASCADE,related_name='staff_leave')
organization = models.ForeignKey(Organization,on_delete=models.CASCADE,related_name='staff_leave')
sub = models.CharField(max_length=300)
msg = models.TextField()
start_day = models.DateField()
end_day = models.DateField()
is_reviewed_by = models.ForeignKey(get_user_model(),on_delete=models.CASCADE,related_name='reviewed_by',blank=True,null=True)
class LeaveReply(models.Model):
staff = models.ForeignKey(get_user_model(),on_delete=models.CASCADE,related_name='leave_status')
leave = models.ForeignKey(Leave,on_delete=models.CASCADE,related_name='leave_status')
sub = models.CharField(max_length=300,blank=True,null=True)
msg = models.TextField(blank=True,null=True)
sent_on = models.DateTimeField(auto_now_add=True)
sent_by = models.ForeignKey(get_user_model(),on_delete=models.CASCADE,related_name='sent_by')
views.py
def leave_detail(request, pk):
leave = get_object_or_404(Leave, pk=pk)
reviewers = leave.reviewed_by.all() # not working
staffs = leave.staff_leave.all() # does not works
staffs = Leave.objects.filter(staff=leave.staff) # this works
reviewers = Leave.objects.filter(is_reviewed_by=leave.is_reviewed_by) # works
reply_sender = LeaveReply.objects.filter(sent_by=leave.is_reviewed_by) #works
reply_sender = leave.sent_by.all() # doesn't works
编辑的答案
型号:
class Leave(models.Model):
staff = models.ForeignKey(get_user_model(),on_delete=models.CASCADE,related_name='staff_leave')
organization = models.ForeignKey(Organization,on_delete=models.CASCADE,related_name='staff_leave')
is_reviewed_by = models.ForeignKey(get_user_model(),on_delete=models.CASCADE,related_name='reviewed_by',blank=True,null=True)
我认为这个模型是针对员工的休假细节的
不工作代码:
reviewers = leave.reviewed_by.all() # not working
staffs = leave.staff_leave.all() # does not works
这是为正在休假的员工和审查休假申请的人员准备的。这两个字段都与用户模型相关。如果我们有Leave
模型的实例(即Leave=get\u object\u或_404(Leave,pk=pk)
),那么我们可以通过以下方法得到这两个:
staffs = leave.staff # for person who will be on leave
reviewers = leave.is_reviewed_by # for the person who reviewed the leave
额外的
如果我们有一个用户实例(User=get\u object\u或_404(User,pk=pk)
),我们想知道他已经休假了多少次,那么我们可以使用相关名称:
no_of_leaves_itaken = user.staff_leave.all()
或者他回顾了多少次假期:
no_of_leaves_reviewed = user.staff_leave.all()
你有点困惑。这里与相关的_名称无关
你有一个离开的对象。如错误所述,休假项目没有“审阅者”
、“发送者”或“员工休假”属性。他们已经由和员工审查了;唯一由对象发送的是在LeaveReply对象上。我如何获得查询,然后是哪个查询?正如我所说,对于前两个,您应该只使用您在模型上定义的属性。我不知道您希望如何处理由
发送的。请您添加一些解释,说明上面的代码片段是如何试图回答这个问题的?您好,AndrewNaguib,很抱歉这样回答。我编辑了我的答案。谢谢你的通知。