From 736615dd7753b9855b8c4c01a2e9f471bd37e1db Mon Sep 17 00:00:00 2001 From: zzy Date: Tue, 24 Feb 2015 19:25:50 +0800 Subject: [PATCH] Add migration support for Django 1.7 --- README.rst | 14 +- notifications/migrations/0001_initial.py | 124 +++++------------- .../south_migrations/0001_initial.py | 96 ++++++++++++++ .../0002_auto__add_field_notification_data.py | 0 ...003_auto__add_field_notification_unread.py | 0 .../0004_convert_readed_to_unread.py | 0 ...005_auto__del_field_notification_readed.py | 0 ...0006_auto__add_field_notification_level.py | 0 notifications/south_migrations/__init__.py | 0 9 files changed, 142 insertions(+), 92 deletions(-) create mode 100644 notifications/south_migrations/0001_initial.py rename notifications/{migrations => south_migrations}/0002_auto__add_field_notification_data.py (100%) rename notifications/{migrations => south_migrations}/0003_auto__add_field_notification_unread.py (100%) rename notifications/{migrations => south_migrations}/0004_convert_readed_to_unread.py (100%) rename notifications/{migrations => south_migrations}/0005_auto__del_field_notification_readed.py (100%) rename notifications/{migrations => south_migrations}/0006_auto__add_field_notification_level.py (100%) create mode 100644 notifications/south_migrations/__init__.py diff --git a/README.rst b/README.rst index 6987b1e..0235b31 100644 --- a/README.rst +++ b/README.rst @@ -60,14 +60,24 @@ Add the notifications urls to your urlconf:: The method of installing these urls, importing rather than using ``'notifications.urls'``, is required to ensure that the urls are installed in the ``notifications`` namespace. -How to migrate schema with `django-south` +How to migrate schema ========================================= +For Django 1.4~1.6 +------------------ + `django-south` support is shipped with `django-notifications`. -#. Install latest version `django-south `_ +#. Install latest version (>=1.0) `django-south `_ #. Execute ``manage.py migrate notifications`` to migrate `django-notifications` schema +For Django 1.7 +-------------- + +Django 1.7 has built-in support for migrations. No need to install `django-south`. + +#. Execute ``manage.py migrate notifications`` + Generating Notifications ========================= diff --git a/notifications/migrations/0001_initial.py b/notifications/migrations/0001_initial.py index b7ede3d..a63192b 100644 --- a/notifications/migrations/0001_initial.py +++ b/notifications/migrations/0001_initial.py @@ -1,96 +1,40 @@ # -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models +from __future__ import unicode_literals -try: - from django.contrib.auth import get_user_model -except ImportError: # django < 1.5 - from django.contrib.auth.models import User -else: - User = get_user_model() - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding model 'Notification' - db.create_table('notifications_notification', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('recipient', self.gf('django.db.models.fields.related.ForeignKey')(related_name='notifications', to=User)), - ('readed', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('actor_content_type', self.gf('django.db.models.fields.related.ForeignKey')(related_name='notify_actor', to=orm['contenttypes.ContentType'])), - ('actor_object_id', self.gf('django.db.models.fields.CharField')(max_length=255)), - ('verb', self.gf('django.db.models.fields.CharField')(max_length=255)), - ('description', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), - ('target_content_type', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='notify_target', null=True, to=orm['contenttypes.ContentType'])), - ('target_object_id', self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True)), - ('action_object_content_type', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='notify_action_object', null=True, to=orm['contenttypes.ContentType'])), - ('action_object_object_id', self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True)), - ('timestamp', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), - ('public', self.gf('django.db.models.fields.BooleanField')(default=True)), - )) - db.send_create_signal('notifications', ['Notification']) +from django.db import models, migrations +import django.utils.timezone +from django.conf import settings - def backwards(self, orm): - # Deleting model 'Notification' - db.delete_table('notifications_notification') +class Migration(migrations.Migration): + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('contenttypes', '0001_initial'), + ] - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'notifications.notification': { - 'Meta': {'ordering': "('-timestamp',)", 'object_name': 'Notification'}, - 'action_object_content_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'notify_action_object'", 'null': 'True', 'to': "orm['contenttypes.ContentType']"}), - 'action_object_object_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), - 'actor_content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'notify_actor'", 'to': "orm['contenttypes.ContentType']"}), - 'actor_object_id': ('django.db.models.fields.CharField', [], {'max_length': '255'}), - 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'readed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'recipient': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'notifications'", 'to': "orm['auth.User']"}), - 'target_content_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'notify_target'", 'null': 'True', 'to': "orm['contenttypes.ContentType']"}), - 'target_object_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'verb': ('django.db.models.fields.CharField', [], {'max_length': '255'}) - } - } - - complete_apps = ['notifications'] + operations = [ + migrations.CreateModel( + name='Notification', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('level', models.CharField(default=b'info', max_length=20, choices=[(b'success', b'success'), (b'info', b'info'), (b'warning', b'warning'), (b'error', b'error')])), + ('unread', models.BooleanField(default=True)), + ('actor_object_id', models.CharField(max_length=255)), + ('verb', models.CharField(max_length=255)), + ('description', models.TextField(null=True, blank=True)), + ('target_object_id', models.CharField(max_length=255, null=True, blank=True)), + ('action_object_object_id', models.CharField(max_length=255, null=True, blank=True)), + ('timestamp', models.DateTimeField(default=django.utils.timezone.now)), + ('public', models.BooleanField(default=True)), + ('action_object_content_type', models.ForeignKey(related_name=b'notify_action_object', blank=True, to='contenttypes.ContentType', null=True)), + ('actor_content_type', models.ForeignKey(related_name=b'notify_actor', to='contenttypes.ContentType')), + ('recipient', models.ForeignKey(related_name=b'notifications', to=settings.AUTH_USER_MODEL)), + ('target_content_type', models.ForeignKey(related_name=b'notify_target', blank=True, to='contenttypes.ContentType', null=True)), + ], + options={ + 'ordering': ('-timestamp',), + }, + bases=(models.Model,), + ), + ] diff --git a/notifications/south_migrations/0001_initial.py b/notifications/south_migrations/0001_initial.py new file mode 100644 index 0000000..b7ede3d --- /dev/null +++ b/notifications/south_migrations/0001_initial.py @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +try: + from django.contrib.auth import get_user_model +except ImportError: # django < 1.5 + from django.contrib.auth.models import User +else: + User = get_user_model() + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'Notification' + db.create_table('notifications_notification', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('recipient', self.gf('django.db.models.fields.related.ForeignKey')(related_name='notifications', to=User)), + ('readed', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('actor_content_type', self.gf('django.db.models.fields.related.ForeignKey')(related_name='notify_actor', to=orm['contenttypes.ContentType'])), + ('actor_object_id', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('verb', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('description', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('target_content_type', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='notify_target', null=True, to=orm['contenttypes.ContentType'])), + ('target_object_id', self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True)), + ('action_object_content_type', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='notify_action_object', null=True, to=orm['contenttypes.ContentType'])), + ('action_object_object_id', self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True)), + ('timestamp', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), + ('public', self.gf('django.db.models.fields.BooleanField')(default=True)), + )) + db.send_create_signal('notifications', ['Notification']) + + + def backwards(self, orm): + # Deleting model 'Notification' + db.delete_table('notifications_notification') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'notifications.notification': { + 'Meta': {'ordering': "('-timestamp',)", 'object_name': 'Notification'}, + 'action_object_content_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'notify_action_object'", 'null': 'True', 'to': "orm['contenttypes.ContentType']"}), + 'action_object_object_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'actor_content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'notify_actor'", 'to': "orm['contenttypes.ContentType']"}), + 'actor_object_id': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'readed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'recipient': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'notifications'", 'to': "orm['auth.User']"}), + 'target_content_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'notify_target'", 'null': 'True', 'to': "orm['contenttypes.ContentType']"}), + 'target_object_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'timestamp': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'verb': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + } + } + + complete_apps = ['notifications'] diff --git a/notifications/migrations/0002_auto__add_field_notification_data.py b/notifications/south_migrations/0002_auto__add_field_notification_data.py similarity index 100% rename from notifications/migrations/0002_auto__add_field_notification_data.py rename to notifications/south_migrations/0002_auto__add_field_notification_data.py diff --git a/notifications/migrations/0003_auto__add_field_notification_unread.py b/notifications/south_migrations/0003_auto__add_field_notification_unread.py similarity index 100% rename from notifications/migrations/0003_auto__add_field_notification_unread.py rename to notifications/south_migrations/0003_auto__add_field_notification_unread.py diff --git a/notifications/migrations/0004_convert_readed_to_unread.py b/notifications/south_migrations/0004_convert_readed_to_unread.py similarity index 100% rename from notifications/migrations/0004_convert_readed_to_unread.py rename to notifications/south_migrations/0004_convert_readed_to_unread.py diff --git a/notifications/migrations/0005_auto__del_field_notification_readed.py b/notifications/south_migrations/0005_auto__del_field_notification_readed.py similarity index 100% rename from notifications/migrations/0005_auto__del_field_notification_readed.py rename to notifications/south_migrations/0005_auto__del_field_notification_readed.py diff --git a/notifications/migrations/0006_auto__add_field_notification_level.py b/notifications/south_migrations/0006_auto__add_field_notification_level.py similarity index 100% rename from notifications/migrations/0006_auto__add_field_notification_level.py rename to notifications/south_migrations/0006_auto__add_field_notification_level.py diff --git a/notifications/south_migrations/__init__.py b/notifications/south_migrations/__init__.py new file mode 100644 index 0000000..e69de29