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