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.