Django создание экземпляра класса в двух разных представлениях не работает - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь создать экземпляр класса, который я создал под названием 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-->

...