【问题标题】:models.Manager errormodels.Manager 错误
【发布时间】:2009-09-21 15:59:27
【问题描述】:

型号:http://dpaste.com/96349/

查看:

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

模板:

/games/ 中的属性错误 “经理”对象没有“已发布”属性

我的观点似乎不太喜欢我的新经理?

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    如果您尝试使用已发布管理器而不是对象管理器,则应从过滤过程中删除对象引用。此外,已发布的管理器是为 Game 模型而非 GameList 模型声明的。您可能需要稍微重构它的工作方式。

    编辑:这可能与您正在尝试做的事情相匹配。

    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
    

    您的新经理过滤器已更改为引用相关游戏的状态,并且经理已附加到 GameList 模型而不是 Game。现在要使用的命令是:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-28
      • 2012-02-16
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多