我看过很多条目,知道如何过滤简单的关系。
不幸的是,我被卡住了,当其中一个表是某个字符串的分支时,我不知道如何过滤表数据。
models.py
from django.contrib.auth.models import User
class Autor(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, unique=True)
description = models.TextField(blank=True, null=True)
class Incident(models.Model):
group_no = models.ForeignKey(Group, on_delete=models.CASCADE, default=1)
description = models.TextField(blank=True, null=True)
deleted = models.BooleanField(default=False)
class Department-leader(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="leader")
department = models.ForeignKey(Group, on_delete=models.CASCADE)
class Group(models.Model):
group_no = models.CharField(max_length=40, unique=True)
active = models.BooleanField(default=True)
views.py
def get_author(user):
qs = Autor.objects.filter(user=user)
if qs.exists():
return qs[0]
return None
def show_all(request):
show_all_records = Incident.objects.filter(deleted=False).order_by('-id')[:300]
if request.user.is_authenticated:
autors_list = get_author(request.user)
user_list = get_user_model()
logged_user = get_object_or_404(user_list, username__exact=autors_list)
(...)
print("Logged user: " + str(logged_user.id))
else:
logged_user = ""
context = {
'show_all_records': show_all_records,
'logged_user': logged_user,
}
return render(request, 'incident/all_records.html', context)
***show_all_records***变量表示***Incident***表中的所有记录,这是可以的。
我想显示的第二件事是登录人员的条目,即登录领导的特定部门中的所有事件。
如果这些表是线性连接的,那么构建这个过滤器就没有问题了。
但是如何为这种表布局制作筛选器呢?
在纯SQL中,它看起来像这样:
select
bledy_bledy.nr_zlecenia,
bledy_bledy.ilosc_bledow,
bledy_gruparobocza.nr_grupy,
auth_user.username,
auth_user.id
from
bledy_bledy
LEFT JOIN
bledy_lider_dzial
on
bledy_bledy.nr_grupy_roboczej_id = bledy_lider_dzial.dzial_id
LEFT JOIN
bledy_gruparobocza
on
bledy_lider_dzial.dzial_id = bledy_gruparobocza.id
LEFT JOIN
auth_user
on
bledy_lider_dzial.user_id = auth_user.id
where
auth_user.id = 4
我能指望一些关于如何构建它的提示吗
1条答案
按热度按时间afdcj2ne1#
我想这可能是你想要的。
还有一个建议:遵循Django命名外键和相关名称的约定。
leaders
而不是leader
(因为它引用了多个或一组前导),group
而不是group_no
,因为它引用了Group
对象。(实际的FK/主键值是通过将_id
附加到字段名来获得的,如上文所用。这是Django的“魔术”。)