2009-03-04 19 views
2

Bazı modeller alanımı kullanırken yapmak istediğim, otomatik olarak o modele özel yönetici ekleyecektir.Alandan Yönetici Ekleme

olarak bildiğim kadarıyla, contibute_to_class böyle işlevsellik sağlamak

class MyCustomField(CharField): 
    def contribute_to_class(self, cls, name): 
     super(MyCustomField, self).contribute_to_class(cls, name) 
     setattr(cls, 'custom_manager', CustomManager()) 

sorun benim özel yöneticisinde i varsayılan yöneticisi sorgulama yapmak için self.model._default_manager kullanmak ama olmasıdır bunu yapmaya çalıştığınızda, django AttributeError diyor ki: 'NoneType' nesnesinin '_default_manager' özniteliği yok '_default_manager'

Katkıda bulunmuyorsa contrib_to_class ve özel yönetici yazmadım model sınıfım ise, beklendiği gibi çalışır. Sorun ne olabilir?

cevap

1
class MyCustomField(CharField): 
    def contribute_to_class(self, cls, name): 
     super(MyCustomField, self).contribute_to_class(cls, name) 
     manager = CustomManager() 
     manager.model = cls 
     setattr(cls, 'custom_manager', manager) 
+0

Manüel olarak ayarlanması hatayı ve kırılganlığı kullanmaktır. Bu sadece Manager.contribute_to_class'ın yaptıklarının bir parçasıdır - asıl çözüm Manager.contribute_to_class'ın düzgün bir şekilde çağrılmasını sağlamaktır. –

4

Yöneticiler, tıpkı Fields gibi, bir contrib_to_class yöntemine sahiptirler ve siz buna çağrı yapmazsanız, düzgün bir şekilde ayarlanmazlar. Bunu çağırmanın doğru yolu, Model.add_to_class: