2017-08-29 2 views
0

J'ai un projet que j'ai construit depuis un moment et j'ai récemment remarqué un problème. utilise ce python 3.6 et Django 1.11en essayant d'ouvrir la page d'administration sur le modèle obj il ne charge jamais

je le modèle suivant

class Mail(models.Model): 
    """ 
    This stores all Downloaded Mails. 
    They relate To alerts raised by the email checking process. 
    """ 
    # This is for turning column numbers into ordering commands 
    ordering = { 
     '0': { 
      'asc': 'mail_from', 
      'desc': '-mail_from' 
     }, 
     '1': { 
      'asc': 'subject', 
      'desc': '-subject' 
     }, 
     '3': { 
      'asc': 'received', 
      'desc': '-received' 
     } 
    } 
    mail_id = models.CharField(unique=True, max_length=255) 
    mail_from = models.EmailField() 
    subject = models.CharField(max_length=255) 
    message = models.TextField() 
    alert = models.ForeignKey(Alert, null=True, blank=True) 
    received = models.DateTimeField(default=timezone.now, db_index=True) 
    processed = models.BooleanField(default=False) 

    class Meta: 
     """ 
     Mails should be ordered by newest first. 
     get_latest_by should be the received property 
     """ 
     get_latest_by = 'received' 
     ordering = ['-received'] 

    def __str__(self) -> str: 
     """ 
     :return: Return string in the format 'Mail_id: subject_text' 
     :rtype: str 
     """ 
     return f'<{self.mail_id}: {self.subject}>' 

je peux accéder et lire les mails en utilisant mon point de vue. Je les avais affichés manuellement mais j'ai décidé de passer à l'aide d'un formulaire pour les montrer. alors j'ai remarqué mon problème. il semble se coincer dans une boucle infinie mettant ce modèle dans une forme.

c'est le modèle

class MailForm(forms.ModelForm): 
    class Meta: 
     model = Mail 
     fields = ['mail_from', 'subject', 'alert', 'received', 'processed'] 

Je suis ensuite allé ouvrir ce dans le site d'administration et a remarqué la même chose se passe. Je peux voir la liste des mails mais quand j'essaie d'ouvrir un mail, ça continue à charger.

+0

Je pense qu'il essaie de montrer toutes les alertes existantes comme des choix possibles pour le champ d'alerte; Si vous en avez plusieurs, le chargement prendra beaucoup de temps. Essayez d'exclure le champ d'alerte. –

+0

wow. c'était ça. bel endroit. un moyen de l'empêcher de faire ça? – Ajurna

Répondre

0

Merci à Daniel Roseman pour avoir remarqué le problème peut-être évident était qu'avait. et je l'ai résolu en utilisant cette réponse How to Stop Django ModelForm From Creating Choices for a Foreign Key

class DiplayAlertText(forms.CharField): 
    def prepare_value(self, value): 
     alert = Alert.objects.get(id=value) 
     return alert.message 

class MailForm(forms.ModelForm): 
    alert = DiplayAlertText() 

    class Meta: 
     model = Mail 
     fields = ['mail_from', 'subject', 'alert', 'received', 'processed']