2013-03-12 11 views
5

Genelleştirilmiş bir doğal anahtar model yöneticisindeki denemem. Meta.unique_together özniteliğinden doğal anahtar alan adlarını belirlemek için (başarısız bir şekilde) denemesi dışında the docs gibidir.Model yöneticisi modellerinin Meta özniteliğine (Meta.unique_together`) erişebilir mi?

class NaturalKeyModelManager(Manager): 

    def get_by_natural_key(self, *args): 
     field_dict = {} 
     for i, k in enumerate(self.model.Meta.unique_together[0]): 
      field_dict[k] = args[i] 
     return self.get(**field_dict) 

Ben hemen önce bir hata ayıklama baskı eklerseniz böyle döngü:

print dir(self.model.Meta) 

da hiç unqiue_together niteliğini listelemiyor:

['__doc__', '__module__', 'abstract'] 

'soyut' biraz endişeliyim, fakat başka bir hata ayıklama baskısı, doğal anahtarlarla yönetmeye çalıştığım modelin soyut olmadığını gösteriyor:

>>> print self.model.Meta.abstract 
False 

Çok sayıda soyut temel sınıfında karışıyorum. Sorun bu olabilir mi? kodlanmış modeli yöneticisi sadece çalışıyor

class TimeStampedModel(Model): 
    created = DateTimeField(_("Created"),  auto_now_add=True, null=True, editable=False) 
    updated = DateTimeField(_("Updated"),  auto_now=True,  null=True, editable=True) 

    class Meta: 
     abstract = True 

: Bütünlüğü için

class MixedModel(NamedModel, TimeStampedModel, VersionedModel, Model): 
    objects = NaturalKeyModelManager() 

    class Meta: 
     unique_together = (('name', 'version',),) 

burada Mixins biri

class MixedModelManager(Manager): 
    def get_by_natural_key(self, name, version): 
     return self.get(name=name, version=version) 

cevap

8

meta geçirilen fiili seçenekleri almak için, self.model.Meta

yerine self.model._meta kullanmalısınız
İlgili konular