How to override the default value of a Model Field from an Abstract Base Class

前端 未结 1 1985
野的像风
野的像风 2020-11-29 04:48

I\'ve got some code that looks like this:

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

             


        
相关标签:
1条回答
  • 2020-11-29 04:59

    You can actually do this as follows:

    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
    

    I have done this once or twice. It works, because the field on Message is a different instance than the field on BaseMessage. However, I doubt it's recommended ;-) It depends a lot on how django internals currently work, so there's no guarantee that it will work forever.

    0 讨论(0)
提交回复
热议问题