2011-06-16 18 views
26

bir Özet Üssü'nden Model Field varsayılan değerini nasıl geçersiz kılınır:Şöyle bazı kodlar var Sınıf

class BaseMessage(models.Model): 
    is_public = models.BooleanField(default=False) 
    # some more fields... 

    class Meta: 
     abstract = True 

class Message(BaseMessage): 
    # some fields... 

ve ben is_public alanın varsayılan değeri geçersiz kılmak istiyorum Mesaj modelinde, bu model için True olmalıdır.

Bazı ilgili Django belgelerini inceledim ve model nesnelerini gezdim ancak bunu yapmak için doğru yeri bulmakta zorlanıyorum. Baska öneri? aşağıdaki gibi

cevap

29

Aslında bunu yapabilirsiniz:

class BaseMessage(models.Model): 
    is_public = models.BooleanField(default=False) 
    # some more fields... 

    class Meta: 
     abstract = True 

class Message(BaseMessage): 
    # some fields... 
Message._meta.get_field('is_public').default = True 

Ben de birkaç kez yaptım. Çalışır, çünkü Mesaj alanındaki alan, BaseMessage alanındaki alandan farklı bir durumdur. Bununla birlikte, önerdiğimden şüphe duyuyorum ;-) Django internals'ın şu anda nasıl çalıştığına çok bağlı, dolayısıyla sonsuza kadar çalışacağına dair bir garanti yok.

+5

Bu benim için çalıştı. Benim durumumda yardım metnini geçersiz sayıyordum. Gerçi başlatıcısı bu kodu taşımak için daha mantıklı, bu yüzden vardır: def __init __ (self, * args, ** kwargs): super (MyModelClass, kendinden) .__ init __ (* args ** kwargs) self._meta.get_field ('mymodelfield'). help_text = self.help_text() – Mark

+3

Bunu "benzersiz" özniteliği için deniyorum, ancak şunu elde ediyorum: "AttributeError: özniteliği ayarlayamıyorum". – guettli

+4

@guettli Burada aynı. 'Unique' ayarlanması için işe yaramıyor. Bu Django 1.7'de. –