Django Модель функции бесконечного цикла - PullRequest
0 голосов
/ 11 января 2020

Когда я пытаюсь сохранить экземпляр в модели контактов, он создает бесконечный l oop (print (dispo_contact) будет печатать 'irl' снова и снова, пока сервер не сломается).

Я не понимаю что не так, когда я пытаюсь код на оболочке, он работает нормально. Похоже, я что-то пропустил. Не могли бы вы помочь мне, пожалуйста?

(также я использую приложение django -multiselectfield)

from django.db import models
from django.utils import timezone
from multiselectfield import MultiSelectField


class Disponibilites(models.Model):


    Dispo_Choices = [
        ('irl', 'personne'),
        ('tel', 'téléphone'),
        ('mail', 'e-mail'),
        ('nan', 'non précisé')
        ]

    dispo = MultiSelectField(choices=Dispo_Choices, default='nan')

    class Meta:
        abstract = True




class Contact(Disponibilites):


    prenom = models.CharField(max_length=42)
    nom = models.CharField(max_length=42)

    metier = models.ManyToManyField('Metier')

    tel = models.CharField(max_length=10, blank=True, null=True)
    mail = models.EmailField(blank=True, null=True)

    date = models.DateTimeField(default=timezone.now, 
                                verbose_name="Date de parution")

    class Meta:
        verbose_name = "contact"

    def __str__(self):

        return "{0} {1}".format(self.prenom, self.nom)




    def delete(self, *args, **kwargs):

        c = self


        for m in c.metier.all() :


            """remove dispo metier"""
            check_list=[]


            for dispo_metier in m.dispo : 

                if dispo_metier not in c.dispo :
                    check_list.append(dispo_metier)


            for dispo_contact in c.dispo :


                if m.contact_set.filter(dispo__contains=dispo_contact).exclude(id=c.id) :
                    check_list.append(dispo_contact)

            m.dispo=check_list
            m.save()
            """fin remove dispo metier"""


            for s in m.secteur.all() :

                """remove dispo secteur"""
                check_list=[]

                for dispo_secteur in s.dispo :
                    if dispo_secteur not in m.dispo :
                        check_list.append(dispo_secteur)

                for dispo_metier in m.dispo :

                    if s.metier_set.filter(dispo__contains=dispo_metier).exclude(id=m.id) :
                        check_list.append(dispo_metier)

                s.dispo=check_list
                s.save()

                """fin remove dispo secteur"""

        super(Contact, self).delete(*args, **kwargs)



    def save(self, *args, **kwargs):
        super(Contact, self).save(*args, **kwargs)
        c= Contact.objects.get(id=self.id)

        for m in c.metier.all():

            """add dispo metier """
            check_list=c.dispo

            for dispo_contact in c.dispo:


                if dispo_contact not in m.dispo :
                    print(dispo_contact)
                    check_list.append(dispo_contact)

            m.dispo=check_list
            m.save()
            """fin add dispo metier"""


            """remove dispo metier   PROBLEME PROBLEME PROBLEME"""
            check_list=[]


            for dispo_metier in m.dispo : 

                if dispo_metier not in c.dispo :
                    check_list.append(dispo_metier)


            for dispo_contact in c.dispo :


                if m.contact_set.filter(dispo__contains=dispo_contact).exclude(id=c.id) :
                    check_list.append(dispo_contact)

            m.dispo=check_list
            m.save()
            """fin remove dispo metier"""

            for s in m.secteur.all() :

                """add dispo secteur"""
                check_list=m.dispo

                for dispo_metier in m.dispo:
                    if dispo_metier not in s.dispo :
                        check_list.append(dispo_metier)

                s.dispo=check_list
                s.save()

                """fin add dispo secteur """




                """remove dispo secteur"""
                check_list=[]

                for dispo_secteur in s.dispo :
                    if dispo_secteur not in m.dispo :
                        check_list.append(dispo_secteur)

                for dispo_metier in m.dispo :

                    if s.metier_set.filter(dispo__contains=dispo_metier).exclude(id=m.id) :
                        check_list.append(dispo_metier)

                s.dispo=check_list
                s.save()

                """fin remove dispo secteur"""



        super(Contact, self).save(*args, **kwargs)



class Metier(Disponibilites):


    metier = models.CharField(max_length=30)
    secteur = models.ManyToManyField('Secteur')

    def __str__(self):
        return self.metier


class Secteur(Disponibilites):


    secteur = models.CharField(max_length=60)

    def __str__(self):
        return self.secteur
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...