2012-09-28 2 views
1

모델 관리자 자체를 모델 클래스 자체에 쓰고 싶습니다. 이 오류가 발생하고 제가하고 싶은 것은도 가능하다면 왜django 매니저가 2. 클래스 수준입니까?

Traceback (most recent call last): 
    File "C:\Users\niklas\Desktop\blog_project\manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "C:\Python27\lib\site-packages\django-1.4.1-py2.7.egg\django\core\management\__init__.py", line 443, in execute_from_command_line 
    utility.execute() 
    File "C:\Python27\lib\site-packages\django-1.4.1-py2.7.egg\django\core\management\__init__.py", line 382, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "C:\Python27\lib\site-packages\django-1.4.1-py2.7.egg\django\core\management\base.py", line 196, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "C:\Python27\lib\site-packages\django-1.4.1-py2.7.egg\django\core\management\base.py", line 231, in execute 
    self.validate() 
    File "C:\Python27\lib\site-packages\django-1.4.1-py2.7.egg\django\core\management\base.py", line 266, in validate 
    num_errors = get_validation_errors(s, app) 
    File "C:\Python27\lib\site-packages\django-1.4.1-py2.7.egg\django\core\management\validation.py", line 30, in get_validation_errors 
    for (app_name, error) in get_app_errors().items(): 
    File "C:\Python27\lib\site-packages\django-1.4.1-py2.7.egg\django\db\models\loading.py", line 158, in get_app_errors 
    self._populate() 
    File "C:\Python27\lib\site-packages\django-1.4.1-py2.7.egg\django\db\models\loading.py", line 64, in _populate 
    self.load_app(app_name, True) 
    File "C:\Python27\lib\site-packages\django-1.4.1-py2.7.egg\django\db\models\loading.py", line 88, in load_app 
    models = import_module('.models', app_name) 
    File "C:\Python27\lib\site-packages\django-1.4.1-py2.7.egg\django\utils\importlib.py", line 35, in import_module 
    __import__(name) 
    File "C:\Users\niklas\Desktop\blog_project\blog\models.py", line 48, in <module> 
    class Post(models.Model): 
    File "C:\Python27\lib\site-packages\django-1.4.1-py2.7.egg\django\db\models\base.py", line 99, in __new__ 
    new_class.add_to_class(obj_name, obj) 
    File "C:\Python27\lib\site-packages\django-1.4.1-py2.7.egg\django\db\models\base.py", line 219, in add_to_class 
    value.contribute_to_class(cls, name) 
TypeError: Error when calling the metaclass bases 
    unbound method contribute_to_class() must be called with Manager instance as first argument (got ModelBase instance instead) 

당신이 말해 줄 수 :

class Post(models.Model): 
    title = models.CharField(max_length=50) 
    slug = models.SlugField(max_length=50, blank=True, unique=True) 
    body = models.TextField(blank=True) 
    pub_date = models.DateTimeField(blank=True) 
    mod_date = models.DateTimeField(blank=True) 
    tags = models.ManyToManyField(Tag) 

    class Meta: 
     ordering = ['pub_date'] # Newest first 

    class Manager(models.Manager): 

     def by_slug(self, slug): 
      slug = slug.strip().lower() 
      return self.get(slug=slug) 

    objects = Manager() 

    def __unicode__(self): 
     return self.title 

    def save(self, *args, **kwargs): 
     self.slug = self.slug or generate_slug(self.title) 
     self.pub_date = self.pub_date or timezone.now() 
     self.mod_date = timezone.now() 
     return super(Post, self).save(*args, **kwargs) 

는하지만 다음과 같은 오류가? 당신이 할 수없는 것처럼

+0

흥미 롭. 모델에 대한 관리자와 함께이 구조가 마음에 듭니다. 여기에있는 정확한 퍼커 니티에 대해 확신 할 수 없지만 빠른 수정은 Manager를 모델 외부에 배치하는 것입니다. 나는 둘러싸는 클래스가 닫힌 클래스의'__new__'에 전달된다는 것을 알지 못했지만, 그 경우에도 나타난다. – dokkaebi

+0

왜 그렇게하고 싶습니까? –

+1

@DanielRoseman 나는 그것을 선호하기 때문에. –

답변

2

그것은이 장고의 버그, 보이는, 당신은 그것을보고 할 수 있습니다 :)

+1

감사합니다! 티켓은 [@ code.djangoproject.com] (https://code.djangoproject.com/ticket/19040)에 있습니다. –

관련 문제