2011-04-20 1 views
0

J'ai deux méthodes personnalisées pour un gestionnaire de modèle dans Django. L'un d'eux travaille. J'ai récemment ajouté un autre et Django (et python) agissent comme si cela n'existait pas. Voici la partie pertinente du modèle:La méthode personnalisée de Django n'apparaîtra pas

class FigureServerManager(models.Manager): 
    #This method takes as input a user and grabs a figure that is not marked complete for which that user has not already submitted a result 
    def serve_to_user(self,user): 
    not_complete=super(FigureServerManager, self).get_query_set().filter(complete=0) 
    for Figure in not_complete: 
     checkifresult=User.objects.get(pk=user).result_set.all().filter(figure=Figure.id) 
    if not checkifresult: 
      return Figure 

    #This is a copy of the above method that I want to change to do something else, but I can't even get it to show up yet 
    def serve_training_task(self, user): 
     with_correct_ans=super(FigureServerManager, self).get_query_set().filter(complete=0) 
     for Figure in with_correct_ans: 
      checkifresult=User.objects.get(pk=user).result_set.all().filter(figure=Figure.id) 
     if not checkifresult: 
       return Figure 

class Figure(models.Model): 
    doi=models.CharField(max_length=20) 
    url=models.CharField(max_length=200) 
    image=models.ImageField(upload_to='classify') 
    complete=models.BooleanField() 
    #include the default manager  
    objects=models.Manager() 
    #add the extra one for serving figures 
    serve_objects=FigureServerManager() 

Je reçois une erreur sur le site Web (exécutant le serveur de développement de Django) comme ceci:

'FigureServerManager' object has no attribute 'serve_training_task' 

et si je lance dir (FigureServerManager) en python la La méthode serve_training_task n'apparaît pas mais la méthode serve_to_user apparaît. Pourquoi does_training_task ne fonctionne-t-il pas?

+1

vous avez un mélange d'onglets et d'espaces, ce qui est généralement une mauvaise idée. – DTing

Répondre

6
+0

Un million de fois oui! – myusuf3

+0

J'ai copié et collé l'espace blanc de début du code de travail au code non fonctionnel et cela a fonctionné. Merci. J'écris ceci dans gedit (un débutant, pouvez-vous le dire?) - Y at-il une meilleure façon d'écrire Python où il y a au moins quelques indices visuels pour me faire part de problèmes comme celui-ci? En ce moment, c'est totalement opaque pour moi. – andy

+0

Malheureusement, aucun éditeur n'est psychique et peut réaliser que vous vouliez dire une méthode par rapport à une fonction au niveau du module. C'est quelque chose que vous devrez acquérir de l'expérience dans le temps. –

Questions connexes