DJANGO запрос к связанным таблицам
У меня есть связанные модели:
# Create your models here.
from django.conf import settings
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
# Create your models here.
class Docs(models.Model):
doc_id = models.CharField ('ID документа', max_length=200,null=True, unique=True)
doc_title = models.CharField ('Название документа', max_length=200,null=True)
hyp_name = models.URLField('Ссылка на документ')
update_date = models.DateField (auto_now=True,verbose_name='Дата обновления документа')
date_per = models.IntegerField('Срок действия прохождения')
def __str__(self):
return self.doc_id
class Meta:
verbose_name = 'Документ'
verbose_name_plural = 'Документы'
class Curicls(models.Model):
curic_id = models.CharField ('ID курикулы', max_length=100, null=True,unique=True)
cur_title = models.CharField ('Название курикулы', max_length=100, null=True)
doc_id = models.ManyToManyField(Docs)
def __str__(self):
return self.curic_id
class Meta:
verbose_name = 'Курикула'
verbose_name_plural = 'Курикулы'
class Rolesl(models.Model):
LEARN = 'A'
CHECK = 'B'
RANG_DIF = [
(CHECK, "ОЗНАКОМИТЬСЯ"),
(LEARN, "ИЗУЧИТЬ")
]
role_name = models.CharField('Название роли', max_length=100, unique=True)
cur_id = models.ManyToManyField (Curicls, max_length=200, verbose_name='ID курикулы')
rang = models.CharField(max_length=1, choices=RANG_DIF, default='', verbose_name='Ранг')
def __str__(self):
return self.role_name
class Meta:
verbose_name = 'Роль'
verbose_name_plural = 'Роли'
#>>> cur = [[print(i1.cur_id.all()) for i1 in i.roles_name.all()] for i in testm]
#cur = [[[print(i2.doc_id.all()) for i2 in i1.cur_id.all()] for i1 in i.roles_name.all()] for i in testm]
#cur = [[[print(i2.doc_id.all().distinct()) for i2 in i1.cur_id.all()] for i1 in i.roles_name.all()] for i in testm]
class Emp(models.Model):
emp_name = models.OneToOneField(User, on_delete= models.CASCADE)
per_no = models.IntegerField('Pers.No.')
last_name = models.CharField('Last Name', max_length=50)
first_name = models.CharField('First Name', max_length=50)
emp_mail = models.EmailField('Email', max_length=100)
roles_name = models.ManyToManyField(Rolesl)
def __str__(self):
return str(self.emp_name)
class Meta:
verbose_name = 'Работник'
verbose_name_plural = 'Работники'
class Progress(models.Model):
emp_name = models.ForeignKey(Emp, on_delete=models.CASCADE)
doc_title = models.ForeignKey(Docs, on_delete=models.CASCADE)
date_create = models.DateField(auto_now_add=True, verbose_name='Дата первого прохождения')
date_update = models.DateField(verbose_name='Дата последнего прохождения')
def __str__(self):
key = str(self.pk)
return f'ID = {self.pk} / Employee = {self.emp_name} / Doc {self.doc_title}'
class Meta:
verbose_name = 'Прогресс'
verbose_name_plural = 'Прогресс'
Я хочу вывести все документы для конкретного пользователя, но чтобы их не было в таблике Progress.
Пока что сделал так:
emproles = Emp.objects.prefetch_related("roles_name__cur_id__doc_id").filter(emp_name = self.request.user)
Но как сравнить это с моделью Progress?
Также в шаблон должна быть выведена вся информация из связанных таблиц ( название роли -> курикулы -> документы для каждой курикулы.