2009-09-21 8 views
2

Modèle: http://dpaste.com/96349/erreur models.Manager

Vue:

def game_list(request): 
     return render_to_response('games/game_list.html', 
            { 'object_list': GameList.objects.published.all().order_by('position')}) 

Modèle:

AttributeError à/jeux/ objet 'Manager' n'a pas d'attribut 'publié'

Would semble que mon point de vue n'aime pas beaucoup mon nouveau manager?

Répondre

3

Si vous essayez d'utiliser le gestionnaire publié à la place du gestionnaire d'objets, vous devez supprimer la référence des objets du processus de filtrage. En outre, le gestionnaire publié est déclaré pour le modèle de jeu, pas pour le modèle GameList. Vous aurez probablement besoin de refactoriser comment cela fonctionne légèrement.

Editer: Voici quelque chose qui pourrait correspondre à ce que vous essayez de faire.

from django.db import models 

class GamePublishedManager(models.Manager): 
use_for_related_fields = True 
def get_query_set(self): 
    return super(GamePublishedManager, self).get_query_set().filter(game__status='p') 

STATUS_CHOICES = (
    ('d', 'Draft'), 
    ('p', 'Published'), 
    ('w', 'Withdrawn'), 
) 

class Game(models.Model): 
name = models.CharField(max_length=200) 
status = models.CharField(max_length=1, choices=STATUS_CHOICES) 

def __unicode__(self): 
    return self.name 

class GameList(models.Model): 
game = models.ForeignKey(Game) 
position = models.IntegerField() 
objects = models.Manager() 
published = GamePublishedManager() 

def __unicode__(self): 
    return self.game.name 

filtre de votre nouveau gestionnaire a été modifié pour faire référence à l'état du jeu lié, et le gestionnaire a été attaché au modèle de GameList au lieu de jeu. La commande à utiliser maintenant serait:

GameList.published.all().order_by('position') 
+0

Exactement ce dont j'avais besoin, merci. –