Я пытаюсь создать экземпляр класса, который я создал под названием Alert, чтобы я мог отображать предупреждения в своем шаблоне, просматривая каждый созданный мной экземпляр.
Итак, у меня есть простой класс Alert, подобный этому:
Класс оповещения:
class Alert():
def __init__(self,level, content):
self.level = level
self.content = content
У меня есть модель сотрудников, чтобы показать некоторые данные о них.
Модель Сотрудник:
class Employee(models.Model):
owner = models.ForeignKey(User,to_field = 'username', on_delete = models.CASCADE,null = True)
name = models.CharField(max_length= 255)
class Meta:
ordering = ['-id']
unique_together = ['name','owner']
def __str__(self):
return self.name
У меня есть два вида, например:
Просмотр Добавить сотрудника:
@login_required(redirect_field_name = '/login',login_url='/login')
def add_employee(request):
if request.method == "POST":
try:
name = request.POST['name']
query = Employee(name = name,owner = request.user)
query.save()
return redirect("main:somepage")
except:
instance = Alert(level = 'error',content = 'This username is already exist in your employee list!')
return redirect("main:somepage")
И это мой второй Просмотр:
Просмотр Удалить Сотрудник:
@login_required(redirect_field_name = '/login',login_url='/login')
def delete_employee(request):
if request.method == "POST":
query = Employee.objects.filter(owner = request.user,name = request.POST['name'])
if len(query) == 1:
query.delete()
instance2 = Alert(level='success', content='Successfully Deleted!')
return redirect("main:main_manage")
Теперь эти представления вызываются один раз в моем шаблоне, когда пользователь запрашивает добавить или удалить явно.
Выше этих двух у меня также есть общий вид сотрудников: Это вид страницы, которую я перенаправляю на "main: somepage"
Вот как это выглядит.
Отображение страницы сотрудников:
@login_required(redirect_field_name = '/login',login_url='/login')
def view_employees(request):
employees = Employee.objects.filter(owner = request.user)
alerts = get_all_instances(Alert)
return render(request, template_name=r'main/manage.html',context = {'employees': employees,
'alerts': alerts})
К сожалению, что происходит, Добавить исключение сотрудника Экземпляр оповещения работает Хорошо, и показывает экземпляр оповещения при перенаправлении. Но ничего не происходит, когда я делаю те же шаги в представлении Удалить сотрудника .
И я не могу понять, почему. Есть два экземпляра, созданные в двух разных представлениях, и один из них хранится в экземплярах оповещений, а другой - нет.
Это самое важное, вот как мои get_all_instances функция выглядит так:
import gc
def get_all_instances(of_class):
_instances = []
for obj in gc.get_objects():
if isinstance(obj,of_class):
_instances.append(obj)
return _instances
Я пытался отладить и выяснить, в чем может быть разница, но я не придумал никакой идеи.
Любая помощь будет оценена.
Не верю, что это необходимо, но вот моя страница с шаблонами кодов сотрудников:
<section id="main-content"> <!--main section start -->
<section class="wrapper">
<!--Display Alerts only if required start -->
{% for alert in alerts %}
<div class="row">
<div class = col-lg-10>
<div class="alert alert-block fade in">
<strong>There is an alert! </strong>{{ alert.content }}
</div>
</div>
</div>
{% endfor %}
<!--Display Alerts only if required end-->