Я получаю эту ошибку в context_processors 'NoneType' object is not iterable
Я хочу показывать сообщения в каждом шаблоне, поэтому мне нужен контекстный процессор. Но я получаю эту ошибку 'NoneType' object is not iterable. Я не могу решить эту проблему. Может ли кто-нибудь посмотреть код и дать решение этой проблемы.
# context_processors.py
from django.contrib import messages
from .models import Loan
def message_notification(request):
loan_requested_lists = Loan.objects.filter(loan_req_user=request.user, active=True, status='Pending')
if loan_requested_lists.exists():
if loan_requested_lists.count() == 1:
for i in loan_requested_lists:
return messages.info(request, f'{i.user.username}({i.user.account_number}) was requested for loan.')
else:
return messages.info(request, f'{loan_requested_lists.count()} users were requested for loan.')
Это мой models.py
from django.utils import timezone
from django.db import models
from accounts.models import User
from django.core.exceptions import ValidationError
# Create your models here.
STATUS = (
('Pending', 'Pending'),
('Accepted', 'Accepted')
)
EDITABLE_STATUS = (
('Not Applicable', 'Not Applicable'),
('Requested', 'Requested'),
('Approved', 'Approved'),
('Not Approved', 'Not Approved'),
('Updated', 'Updated'),
)
def validate_date(date):
if date < timezone.now():
raise ValidationError("Date cannot be in the past")
class Loan(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
loan_req_user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='loan_given_user_list', verbose_name='Loan Requested From User')
amount = models.PositiveIntegerField(verbose_name='Loan Amount')
date = models.DateTimeField(default=timezone.now, validators=[validate_date], verbose_name='Loan Return Date')
status = models.CharField(max_length=8, choices=STATUS, default='Pending')
editable = models.CharField(max_length=14, choices=EDITABLE_STATUS, default='Not Applicable')
active = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True, verbose_name='Loan Requested Date')
def __str__(self):
return self.user.username
Я нашел решение. Вот код в файле context_processors.py
#context_processors.py
def message_notification(request):
message = None
if request.user.is_authenticated:
loan_requested_lists = Loan.objects.filter(loan_req_user=request.user, active=True, status='Pending')
if loan_requested_lists.exists():
if loan_requested_lists.count() == 1:
for i in loan_requested_lists:
message = f'{i.user.username}({i.user.account_number}) was requested for loan.'
else:
message = f'{loan_requested_lists.count()} users were requested for loan.'
context = {
'message': message
}
return context