Как отобразить что-то из базы данных после удовлетворения нескольких критериев в django
Здесь у меня есть модель рекомендателей:
class Recommenders(models.Model):
objects = None
Subject = models.ForeignKey(SendApproval, on_delete=models.CASCADE, null=True)
Recommender = models.CharField(max_length=20, null=True)
Status = models.CharField(null=True, max_length=8, default="Pending")
Time = models.DateTimeField(auto_now_add=True)
Еще одна модель Подходит:
class Approvers(models.Model):
objects = None
Subject = models.ForeignKey(SendApproval, on_delete=models.CASCADE, null=True)
Approver = models.CharField(max_length=20, null=True)
Status = models.CharField(null=True, max_length=8, default="Pending")
Time = models.DateTimeField(auto_now_add=True)
А моя модель SendApproval выглядит так:
class SendApproval(models.Model):
Subject = models.CharField(max_length=256)
Date = models.DateField(null=True)
Attachment = models.FileField(upload_to=get_file_path)
SentBy = models.CharField(null=True, max_length=100)
Status = models.CharField(null= True, max_length=8, default="Pending")
Теперь моя проблема в том, что я должен отобразить тему и вложение из таблицы SendApproval только тогда, когда статус всех рекомендателей в таблице Recommenders, относящихся к этой теме, будет "Approved". Не знаю, как я могу это узнать... Спасибо заранее...
Вообще-то у меня нет идей по поводу решения, но лучший ответ будет оценен по достоинству... Кстати, я новичок на StackOverflow... Поэтому, пожалуйста, дайте мне знать, если в моем вопросе есть какая-то двусмысленность.
Используя первичную модель, вы можете получить связанные с ней данные из вторичной модели. Для этого в первичной модели по умолчанию создается специальное свойство (объект) с именем secondary model_set. В вашем случае, например: recommenders_set. Переменная rec запрашивает данные, в которых присутствует 'Approved'. Далее в цикле записывается список непустых значений модели SendApproval и этот список помещается в контекст шаблона.
На странице отображаются: 'Recommender.id', 'Subject.Status', 'Subject.id'.
Замените bboard на название папки, в которой находятся ваши шаблоны. У меня это: templates/bboard, которые находятся в папке приложения.
views.py
def info(request):
rec = SendApproval.objects.filter(Status='Approved')
aaa = []
for i in rec:
if len(i.recommenders_set.all()) > 0:
aaa.append(i.recommenders_set.all())
return render(request, 'bboard/templ.html', {'context': aaa})
urls.py
urlpatterns = [
path('info/', info, name='info'),
]
templates
{% for a in context %}
{% for aa in a %}
<p>{{ 'Recommender.id' }} : {{ aa.id }} , {{ 'Subject.Status' }} : {{ aa.Subject.Status }}, {{ 'Subject.id' }} : {{ aa.Subject.id }}</p>
{% endfor %}
{% endfor %}