From ececc658f22f2bb631861eed027d4ad6a155dd06 Mon Sep 17 00:00:00 2001 From: SimonSarazin Date: Fri, 17 Apr 2015 11:24:19 +0200 Subject: [PATCH 01/21] Added community on project model, deleted group Also deleted "groups" as we'll not use Group app --- .../migrations/0013_auto__add_community.py | 138 ++++++++++++++++++ projects/models.py | 3 +- 2 files changed, 140 insertions(+), 1 deletion(-) create mode 100644 projects/migrations/0013_auto__add_community.py diff --git a/projects/migrations/0013_auto__add_community.py b/projects/migrations/0013_auto__add_community.py new file mode 100644 index 0000000..945d089 --- /dev/null +++ b/projects/migrations/0013_auto__add_community.py @@ -0,0 +1,138 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'Community' + db.create_table(u'projects_community', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'])), + )) + db.send_create_signal(u'projects', ['Community']) + + # Removing M2M table for field groups on 'Project' + db.delete_table(db.shorten_name(u'projects_project_groups')) + + + def backwards(self, orm): + # Deleting model 'Community' + db.delete_table(u'projects_community') + + # Adding M2M table for field groups on 'Project' + m2m_table_name = db.shorten_name(u'projects_project_groups') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('project', models.ForeignKey(orm[u'projects.project'], null=False)), + ('group', models.ForeignKey(orm[u'auth.group'], null=False)) + )) + db.create_unique(m2m_table_name, ['project_id', 'group_id']) + + + models = { + u'accounts.profile': { + 'Meta': {'object_name': 'Profile'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mugshot': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'blank': 'True'}), + 'privacy': ('django.db.models.fields.CharField', [], {'default': "'registered'", 'max_length': '15'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': u"orm['auth.User']"}) + }, + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'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', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), + u'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', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + u'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'}), + u'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'}) + }, + u'projects.community': { + 'Meta': {'object_name': 'Community'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.Project']"}) + }, + u'projects.project': { + 'Meta': {'object_name': 'Project'}, + 'baseline': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True', 'blank': 'True'}), + 'begin_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'created_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'location': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['scout.Place']", 'null': 'True', 'blank': 'True'}), + 'progress': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.ProjectProgress']", 'null': 'True', 'blank': 'True'}), + 'slug': ('autoslug.fields.AutoSlugField', [], {'unique': 'True', 'max_length': '50', 'populate_from': 'None', 'unique_with': '()'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) + }, + u'projects.projectprogress': { + 'Meta': {'ordering': "['order']", 'object_name': 'ProjectProgress'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '500'}), + 'icon': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}), + 'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'progress_range': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.ProjectProgressRange']"}) + }, + u'projects.projectprogressrange': { + 'Meta': {'object_name': 'ProjectProgressRange'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'slug': ('autoslug.fields.AutoSlugField', [], {'unique': 'True', 'max_length': '50', 'populate_from': "'name'", 'unique_with': '()'}) + }, + u'projects.projectteam': { + 'Meta': {'object_name': 'ProjectTeam'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'members': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['accounts.Profile']", 'symmetrical': 'False'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.Project']"}) + }, + u'scout.place': { + 'Meta': {'object_name': 'Place'}, + 'address': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'place'", 'to': u"orm['scout.PostalAddress']"}), + 'geo': ('django.contrib.gis.db.models.fields.PointField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + u'scout.postaladdress': { + 'Meta': {'object_name': 'PostalAddress'}, + 'address_locality': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'address_region': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'country': ('django.db.models.fields.CharField', [], {'max_length': '2'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'post_office_box_number': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}), + 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'street_address': ('django.db.models.fields.TextField', [], {'blank': 'True'}) + } + } + + complete_apps = ['projects'] \ No newline at end of file diff --git a/projects/models.py b/projects/models.py index a8ecb9e..45d9d14 100644 --- a/projects/models.py +++ b/projects/models.py @@ -57,12 +57,13 @@ class Project(models.Model): end_date = models.DateField(null=True, blank=True) progress = models.ForeignKey(ProjectProgress, null=True, blank=True) created_on = models.DateTimeField(auto_now_add=True) - groups = models.ManyToManyField(Group, null=True, blank=True) def __unicode__(self): """ pep257, you know I love you. """ return self.title +class Community(models.Model): + project = models.ForeignKey(Project) # XXX/TODO: obsolete class ProjectTeam(models.Model): From e52b25b078b4b5fb1e868585f515772788038ae1 Mon Sep 17 00:00:00 2001 From: SimonSarazin Date: Fri, 17 Apr 2015 11:44:00 +0200 Subject: [PATCH 02/21] Added a comment and a related name --- projects/models.py | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/projects/models.py b/projects/models.py index 45d9d14..1a015b0 100644 --- a/projects/models.py +++ b/projects/models.py @@ -62,18 +62,11 @@ def __unicode__(self): """ pep257, you know I love you. """ return self.title -class Community(models.Model): - project = models.ForeignKey(Project) - -# XXX/TODO: obsolete -class ProjectTeam(models.Model): - - """ A project team. - - .. todo:: this model is probably obsolete. - Someones knowing the truth checks it? - Does the project group replaces it ? +class ProjectCommunity(models.Model): + """ + This class help us to find the whole community linked to a project. We use ObjectProfileLink in + order to record a link between a user profile and the ProjectCommunity. With ObjectProfileLink, + we car have a "level of implication" of the member in the Community """ + project = models.ForeignKey(Project, related_name='project_community')) - project = models.ForeignKey(Project) - members = models.ManyToManyField(Profile) From 40cfb676da43acf0858f0e30f05fa05ed84fcb69 Mon Sep 17 00:00:00 2001 From: SimonSarazin Date: Fri, 17 Apr 2015 11:47:57 +0200 Subject: [PATCH 03/21] Changed again related name and modified comment --- projects/models.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/projects/models.py b/projects/models.py index 1a015b0..98408e4 100644 --- a/projects/models.py +++ b/projects/models.py @@ -64,9 +64,9 @@ def __unicode__(self): class ProjectCommunity(models.Model): """ - This class help us to find the whole community linked to a project. We use ObjectProfileLink in + This class helps us to find the whole community linked to a project. We use ObjectProfileLink in order to record a link between a user profile and the ProjectCommunity. With ObjectProfileLink, - we car have a "level of implication" of the member in the Community + we can have a "level of implication" of the member in the community """ - project = models.ForeignKey(Project, related_name='project_community')) + project = models.ForeignKey(Project, related_name='community')) From e3dd2c457493a6e1119d822668fb394d76f31b4b Mon Sep 17 00:00:00 2001 From: SimonSarazin Date: Fri, 17 Apr 2015 12:17:46 +0200 Subject: [PATCH 04/21] Community class is not essential for the moment, i deleted it --- projects/models.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/projects/models.py b/projects/models.py index 98408e4..b898bbe 100644 --- a/projects/models.py +++ b/projects/models.py @@ -62,11 +62,3 @@ def __unicode__(self): """ pep257, you know I love you. """ return self.title -class ProjectCommunity(models.Model): - """ - This class helps us to find the whole community linked to a project. We use ObjectProfileLink in - order to record a link between a user profile and the ProjectCommunity. With ObjectProfileLink, - we can have a "level of implication" of the member in the community - """ - project = models.ForeignKey(Project, related_name='community')) - From 3f75d5d267772c1d212c1241b8da8ce66b50e1e7 Mon Sep 17 00:00:00 2001 From: SimonSarazin Date: Fri, 17 Apr 2015 12:22:55 +0200 Subject: [PATCH 05/21] Updated migration --- ...14_auto__del_community__del_projectteam.py | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 projects/migrations/0014_auto__del_community__del_projectteam.py diff --git a/projects/migrations/0014_auto__del_community__del_projectteam.py b/projects/migrations/0014_auto__del_community__del_projectteam.py new file mode 100644 index 0000000..677c0c6 --- /dev/null +++ b/projects/migrations/0014_auto__del_community__del_projectteam.py @@ -0,0 +1,94 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Deleting model 'Community' + db.delete_table(u'projects_community') + + # Deleting model 'ProjectTeam' + db.delete_table(u'projects_projectteam') + + # Removing M2M table for field members on 'ProjectTeam' + db.delete_table(db.shorten_name(u'projects_projectteam_members')) + + + def backwards(self, orm): + # Adding model 'Community' + db.create_table(u'projects_community', ( + ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'])), + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + )) + db.send_create_signal(u'projects', ['Community']) + + # Adding model 'ProjectTeam' + db.create_table(u'projects_projectteam', ( + ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'])), + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + )) + db.send_create_signal(u'projects', ['ProjectTeam']) + + # Adding M2M table for field members on 'ProjectTeam' + m2m_table_name = db.shorten_name(u'projects_projectteam_members') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('projectteam', models.ForeignKey(orm[u'projects.projectteam'], null=False)), + ('profile', models.ForeignKey(orm[u'accounts.profile'], null=False)) + )) + db.create_unique(m2m_table_name, ['projectteam_id', 'profile_id']) + + + models = { + u'projects.project': { + 'Meta': {'object_name': 'Project'}, + 'baseline': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True', 'blank': 'True'}), + 'begin_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'created_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'location': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['scout.Place']", 'null': 'True', 'blank': 'True'}), + 'progress': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.ProjectProgress']", 'null': 'True', 'blank': 'True'}), + 'slug': ('autoslug.fields.AutoSlugField', [], {'unique': 'True', 'max_length': '50', 'populate_from': 'None', 'unique_with': '()'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) + }, + u'projects.projectprogress': { + 'Meta': {'ordering': "['order']", 'object_name': 'ProjectProgress'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '500'}), + 'icon': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}), + 'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'progress_range': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.ProjectProgressRange']"}) + }, + u'projects.projectprogressrange': { + 'Meta': {'object_name': 'ProjectProgressRange'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'slug': ('autoslug.fields.AutoSlugField', [], {'unique': 'True', 'max_length': '50', 'populate_from': "'name'", 'unique_with': '()'}) + }, + u'scout.place': { + 'Meta': {'object_name': 'Place'}, + 'address': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'place'", 'to': u"orm['scout.PostalAddress']"}), + 'geo': ('django.contrib.gis.db.models.fields.PointField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + u'scout.postaladdress': { + 'Meta': {'object_name': 'PostalAddress'}, + 'address_locality': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'address_region': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'country': ('django.db.models.fields.CharField', [], {'max_length': '2'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'post_office_box_number': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}), + 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'street_address': ('django.db.models.fields.TextField', [], {'blank': 'True'}) + } + } + + complete_apps = ['projects'] \ No newline at end of file From b851bac85c9487b932527b5891be6dbddfb801f6 Mon Sep 17 00:00:00 2001 From: Freddy Limpens Date: Thu, 9 Apr 2015 17:09:07 +0200 Subject: [PATCH 06/21] fixed template resource dehydrating + remove team from project resource --- projects/api.py | 6 +----- projectsheet/api.py | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/projects/api.py b/projects/api.py index e35d02d..8394b65 100644 --- a/projects/api.py +++ b/projects/api.py @@ -35,10 +35,9 @@ class ProjectResource(ModelResource): location = fields.ToOneField(PlaceResource, 'location', null=True, blank=True, full=True) progress = fields.ToOneField(ProjectProgressResource, 'progress', null=True, blank=True, full=True) tools = fields.ToManyField('projecttool.api.ProjectToolResource', 'tools', null=True, blank=True, full=True) - team = fields.ToManyField("projects.api.ProjectTeamResource", "projectteam_set", null=True, blank=True, full=True) # TODO: 20150302 keep ? - tags = fields.ToManyField('graffiti.api.TagResource', 'tags', full=True) + tags = fields.ToManyField('graffiti.api.TagResource', 'tags', full=True, null=True) # TODO: 20150302 will migrate to elsewhere unisson = fields.ToManyField('unisson.api.EvaluationIngredientResource', 'unisson_ingredients', null=True, blank=True, full=True) @@ -50,15 +49,12 @@ class Meta: always_return_data = True authentication = AnonymousApiKeyAuthentication() authorization = DjangoAuthorization() - filtering = { 'slug': ('exact',), 'id' : ('exact', ), 'location': ALL_WITH_RELATIONS, } - authentication = AnonymousApiKeyAuthentication() - authorization = DjangoAuthorization() # XXX/TODO: obsolete this class in favor of ObjectProfileLink diff --git a/projectsheet/api.py b/projectsheet/api.py index be2897e..f65b71d 100644 --- a/projectsheet/api.py +++ b/projectsheet/api.py @@ -26,7 +26,7 @@ class Meta: def dehydrate(self, bundle): bundle.data["questions"] = [] - for question in bundle.obj.projectsheetquestion_set.all(): + for question in bundle.obj.questions.all(): bundle.data["questions"].append(question.text) return bundle From b8bcb5d58dcc147fdf3b637d9c35433eda847a4b Mon Sep 17 00:00:00 2001 From: SimonSarazin Date: Fri, 10 Apr 2015 10:37:12 +0200 Subject: [PATCH 07/21] Update usage.py Update usage API so that's faster to charge API --- commons/api/usage.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/commons/api/usage.py b/commons/api/usage.py index 2710cee..192feb8 100644 --- a/commons/api/usage.py +++ b/commons/api/usage.py @@ -10,8 +10,8 @@ class Meta: resource_name = 'project/commons/pertinence' authorization = Authorization() - project = fields.ForeignKey('projects.api.ProjectResource', 'project', null=True, blank=True, full=True) - usage = fields.ForeignKey('commons.api.usage.UsageResource', 'usage', full=True, null=True, blank=True) + project = fields.ForeignKey('projects.api.ProjectResource', 'project', use_in='detail', null=True, blank=True, full=True) + usage = fields.ForeignKey('commons.api.usage.UsageResource', 'usage', use_in='detail', full=True, null=True, blank=True) class UsageResource(ModelResource): @@ -21,4 +21,4 @@ class Meta: resource_name = 'project/commons/usage' authorization = Authorization() - project = fields.ToManyField('projects.api.ProjectResource', 'project', null=True, blank=True, full=True) + project = fields.ToManyField('projects.api.ProjectResource', 'project', use_in='detail', null=True, blank=True, full=True) From 171f69ae212fdde9c9d54477f8504f501ab9a168 Mon Sep 17 00:00:00 2001 From: Freddy Limpens Date: Fri, 10 Apr 2015 18:03:58 +0200 Subject: [PATCH 08/21] fixed stuff for project and projectsheet listing --- accounts/api.py | 6 +++++- projects/api.py | 23 +++++++++++------------ projectsheet/api.py | 42 +++++++++++++++++++++--------------------- projectsheet/models.py | 6 ------ 4 files changed, 37 insertions(+), 40 deletions(-) diff --git a/accounts/api.py b/accounts/api.py index 106537c..a743179 100644 --- a/accounts/api.py +++ b/accounts/api.py @@ -27,6 +27,10 @@ class Meta: authentication = Authentication() authorization = Authorization() fields = ['username', 'first_name', 'last_name', 'groups', 'email'] + filtering = { + "id" : ['exact',], + "username": ALL_WITH_RELATIONS, + } groups = fields.ToManyField('accounts.api.GroupResource', 'groups', null=True, full=False) @@ -227,4 +231,4 @@ def dispatch_list(self, request, **kwargs): response_class=http.HttpCreated, location=self.get_resource_uri(bundle)) - return ModelResource.dispatch_list(self, request, **kwargs) \ No newline at end of file + return ModelResource.dispatch_list(self, request, **kwargs) diff --git a/projects/api.py b/projects/api.py index 8394b65..daeeb5b 100644 --- a/projects/api.py +++ b/projects/api.py @@ -1,4 +1,4 @@ -from tastypie.resources import ModelResource + from tastypie.resources import ModelResource from tastypie import fields from .models import Project, ProjectProgressRange, ProjectProgress, ProjectTeam @@ -58,15 +58,14 @@ class Meta: # XXX/TODO: obsolete this class in favor of ObjectProfileLink -class ProjectTeamResource(ModelResource): - project = fields.ToOneField(ProjectResource, "project") - members = fields.ToManyField(ProfileResource, "members", full=True) +# class ProjectTeamResource(ModelResource): +# project = fields.ToOneField(ProjectResource, "project") +# members = fields.ToManyField(ProfileResource, "members", full=True) - class Meta: - queryset = ProjectTeam.objects.all() - allowed_methods = ['get',] - always_return_data = True - - filtering = { - "project": ALL_WITH_RELATIONS, - } \ No newline at end of file +# class Meta: +# queryset = ProjectTeam.objects.all() +# allowed_methods = ['get',] +# always_return_data = True +# filtering = { +# "project": ALL_WITH_RELATIONS, +# } \ No newline at end of file diff --git a/projectsheet/api.py b/projectsheet/api.py index f65b71d..a74690b 100644 --- a/projectsheet/api.py +++ b/projectsheet/api.py @@ -10,8 +10,22 @@ from dataserver.authentication import AnonymousApiKeyAuthentication from bucket.api import BucketResource, BucketFileResource + +class ProjectSheetQuestionResource(ModelResource): + class Meta: + queryset = ProjectSheetQuestion.objects.all() + allowed_methods = ['post', 'get'] + resource_name = 'project/sheet/question' + authentication = AnonymousApiKeyAuthentication() + authorization = DjangoAuthorization() + + def hydrate(self, bundle): + bundle.obj.template = ProjectSheetTemplate.objects.get(id=bundle.data["template_id"]) + return bundle + + class ProjectSheetTemplateResource(ModelResource): - questions = fields.ToManyField("projectsheet.api.ProjectSheetQuestionResource", 'projectsheetquestion_set', full=True, null=True) + questions = fields.ToManyField(ProjectSheetQuestionResource, 'questions', full=True, null=True) class Meta: queryset = ProjectSheetTemplate.objects.all() @@ -24,39 +38,25 @@ class Meta: 'slug' : ('exact', ) } - def dehydrate(self, bundle): - bundle.data["questions"] = [] - for question in bundle.obj.questions.all(): - bundle.data["questions"].append(question.text) - return bundle - -class ProjectSheetQuestionResource(ModelResource): - class Meta: - queryset = ProjectSheetQuestion.objects.all() - allowed_methods = ['post', 'get'] - resource_name = 'project/sheet/question' - authentication = AnonymousApiKeyAuthentication() - authorization = DjangoAuthorization() - - def hydrate(self, bundle): - bundle.obj.template = ProjectSheetTemplate.objects.get(id=bundle.data["template_id"]) - return bundle class ProjectSheetQuestionAnswerResource(ModelResource): + question = fields.ToOneField(ProjectSheetQuestionResource, 'question', full=True) + projectsheet = fields.ToOneField("projectsheet.api.ProjectSheetResource", 'projectsheet') + class Meta: queryset = ProjectSheetQuestionAnswer.objects.all() - allowed_methods = ['get', 'patch'] + allowed_methods = ['get', 'patch', 'post'] resource_name = 'project/sheet/question_answer' authentication = AnonymousApiKeyAuthentication() authorization = DjangoAuthorization() class ProjectSheetResource(ModelResource): - project = fields.ToOneField(ProjectResource, 'project') + project = fields.ToOneField(ProjectResource, 'project', full=True) template = fields.ToOneField(ProjectSheetTemplateResource, 'template') bucket = fields.ToOneField(BucketResource, 'bucket', null=True, full=True) cover = fields.ToOneField(BucketFileResource, 'cover', null=True, full=True) - question_answers = fields.ToManyField(ProjectSheetQuestionAnswerResource, 'question_answers', null=True) + question_answers = fields.ToManyField(ProjectSheetQuestionAnswerResource, 'question_answers', null=True, full=True) videos = fields.DictField(attribute='videos', null=True) diff --git a/projectsheet/models.py b/projectsheet/models.py index c3c11de..d8d579c 100644 --- a/projectsheet/models.py +++ b/projectsheet/models.py @@ -58,10 +58,4 @@ class Meta: def __unicode__(self): return u"Answer to question <%s> for <%s>" % (self.question, self.projectsheet) -def createProjectSheetQuestionAnswer(sender, instance, created, **kwargs): - for question in instance.template.questions.all(): - ProjectSheetQuestionAnswer.objects.create(projectsheet=instance, - question=question) - -post_save.connect(createProjectSheetQuestionAnswer, ProjectSheet) pre_save.connect(createProjectSheetBucket, ProjectSheet) From c0cc4da8f1aeb41dc4f7248abdf47553a56740ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cort=C3=A8s?= Date: Tue, 14 Apr 2015 13:50:13 +0200 Subject: [PATCH 09/21] Revert part of https://github.com/CommonsDev/dataserver/commit/e61313247bc8a1deb18bd993a0244a238b222405 else the server doesn't start anymore. --- projects/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/api.py b/projects/api.py index daeeb5b..4a9ab53 100644 --- a/projects/api.py +++ b/projects/api.py @@ -68,4 +68,4 @@ class Meta: # always_return_data = True # filtering = { # "project": ALL_WITH_RELATIONS, -# } \ No newline at end of file +# } From 2f145ee88d314ccca63a015f3eaa4b797ceaacb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cort=C3=A8s?= Date: Tue, 14 Apr 2015 13:54:37 +0200 Subject: [PATCH 10/21] flake8. --- projects/api.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/projects/api.py b/projects/api.py index 4a9ab53..ee609cd 100644 --- a/projects/api.py +++ b/projects/api.py @@ -34,13 +34,13 @@ class Meta: class ProjectResource(ModelResource): location = fields.ToOneField(PlaceResource, 'location', null=True, blank=True, full=True) progress = fields.ToOneField(ProjectProgressResource, 'progress', null=True, blank=True, full=True) - tools = fields.ToManyField('projecttool.api.ProjectToolResource', 'tools', null=True, blank=True, full=True) + tools = fields.ToManyField('projecttool.api.ProjectToolResource', 'tools', null=True, blank=True, full=True) # TODO: 20150302 keep ? tags = fields.ToManyField('graffiti.api.TagResource', 'tags', full=True, null=True) - + # TODO: 20150302 will migrate to elsewhere - unisson = fields.ToManyField('unisson.api.EvaluationIngredientResource', 'unisson_ingredients', null=True, blank=True, full=True) + unisson = fields.ToManyField('unisson.api.EvaluationIngredientResource', 'unisson_ingredients', null=True, blank=True, full=True) class Meta: queryset = Project.objects.all() @@ -49,19 +49,17 @@ class Meta: always_return_data = True authentication = AnonymousApiKeyAuthentication() authorization = DjangoAuthorization() + filtering = { 'slug': ('exact',), 'id' : ('exact', ), 'location': ALL_WITH_RELATIONS, } - - # XXX/TODO: obsolete this class in favor of ObjectProfileLink # class ProjectTeamResource(ModelResource): # project = fields.ToOneField(ProjectResource, "project") # members = fields.ToManyField(ProfileResource, "members", full=True) - # class Meta: # queryset = ProjectTeam.objects.all() # allowed_methods = ['get',] From 85a9044fd3b6a14c0ee3584fc7c9bdd6792a389d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cort=C3=A8s?= Date: Tue, 14 Apr 2015 16:46:16 +0200 Subject: [PATCH 11/21] flake8 happyness. --- projects/models.py | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/projects/models.py b/projects/models.py index ace3e37..d142f49 100644 --- a/projects/models.py +++ b/projects/models.py @@ -1,19 +1,31 @@ +""" Projects and related models. """ + from django.db import models from autoslug.fields import AutoSlugField from taggit.managers import TaggableManager from scout.models import Place from accounts.models import Profile -from django.db.models.signals import post_save -from django.dispatch.dispatcher import receiver +# from django.db.models.signals import post_save +# from django.dispatch.dispatcher import receiver + class ProjectProgressRange(models.Model): + + """ A project progress range. """ + name = models.CharField(max_length=100) slug = AutoSlugField(unique=True, populate_from="name", always_update=True) def __unicode__(self): + """ pep257, you know I love you. """ + return u"%s" % self.name + class ProjectProgress(models.Model): + + """ A project progress. """ + progress_range = models.ForeignKey(ProjectProgressRange) order = models.PositiveIntegerField(default=0) label = models.CharField(max_length=30) @@ -21,15 +33,18 @@ class ProjectProgress(models.Model): icon = models.ImageField(upload_to='progress_icons') class Meta: - ordering = ['order',] + ordering = ['order', ] def __unicode__(self): + """ pep257, you know I love you. """ + return u"%s - %s - %s" % (self.progress_range, self.order, self.label) + class Project(models.Model): - """ - A project is any idea you can document - """ + + """ A project is any idea you can document. """ + title = models.CharField(max_length=100) slug = AutoSlugField(unique=True) baseline = models.CharField(max_length=250, null=True, blank=True) @@ -43,10 +58,19 @@ class Project(models.Model): created_on = models.DateTimeField(auto_now_add=True) def __unicode__(self): + """ pep257, you know I love you. """ return self.title + # XXX/TODO: obsolete class ProjectTeam(models.Model): + + """ A project team. + + .. todo:: this model is probably obsolete. + Someones knowing the truth checks it? + """ + project = models.ForeignKey(Project) members = models.ManyToManyField(Profile) From f82618c6788371e9254e5964c1d12fb24dfe9df3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cort=C3=A8s?= Date: Tue, 14 Apr 2015 16:50:23 +0200 Subject: [PATCH 12/21] Add Project.groups field + migration + missing migration for Project.{begin,end}_date. WARNING: south tried to add the `created_on` column, but I already add it in my database, thus I removed the field from the migration. --- ..._on__chg_field_project_begin_date__chg_.py | 141 ++++++++++++++++++ projects/models.py | 3 + 2 files changed, 144 insertions(+) create mode 100644 projects/migrations/0012_auto__add_field_project_created_on__chg_field_project_begin_date__chg_.py diff --git a/projects/migrations/0012_auto__add_field_project_created_on__chg_field_project_begin_date__chg_.py b/projects/migrations/0012_auto__add_field_project_created_on__chg_field_project_begin_date__chg_.py new file mode 100644 index 0000000..8e1cb9b --- /dev/null +++ b/projects/migrations/0012_auto__add_field_project_created_on__chg_field_project_begin_date__chg_.py @@ -0,0 +1,141 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding M2M table for field groups on 'Project' + m2m_table_name = db.shorten_name(u'projects_project_groups') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('project', models.ForeignKey(orm[u'projects.project'], null=False)), + ('group', models.ForeignKey(orm[u'auth.group'], null=False)) + )) + db.create_unique(m2m_table_name, ['project_id', 'group_id']) + + + # Changing field 'Project.begin_date' + db.alter_column(u'projects_project', 'begin_date', self.gf('django.db.models.fields.DateField')(null=True)) + + # Changing field 'Project.location' + db.alter_column(u'projects_project', 'location_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['scout.Place'], null=True)) + + def backwards(self, orm): + + # Removing M2M table for field groups on 'Project' + db.delete_table(db.shorten_name(u'projects_project_groups')) + + + # User chose to not deal with backwards NULL issues for 'Project.begin_date' + raise RuntimeError("Cannot reverse this migration. 'Project.begin_date' and its values cannot be restored.") + + # The following code is provided here to aid in writing a correct migration + # Changing field 'Project.begin_date' + db.alter_column(u'projects_project', 'begin_date', self.gf('django.db.models.fields.DateField')()) + + # Changing field 'Project.location' + db.alter_column(u'projects_project', 'location_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['scout.PostalAddress'], null=True)) + + models = { + u'accounts.profile': { + 'Meta': {'object_name': 'Profile'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mugshot': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'blank': 'True'}), + 'privacy': ('django.db.models.fields.CharField', [], {'default': "'registered'", 'max_length': '15'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': u"orm['auth.User']"}) + }, + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'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', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), + u'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', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + u'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'}), + u'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'}) + }, + u'projects.project': { + 'Meta': {'object_name': 'Project'}, + 'baseline': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True', 'blank': 'True'}), + 'begin_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'created_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['auth.Group']", 'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'location': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['scout.Place']", 'null': 'True', 'blank': 'True'}), + 'progress': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.ProjectProgress']", 'null': 'True', 'blank': 'True'}), + 'slug': ('autoslug.fields.AutoSlugField', [], {'unique': 'True', 'max_length': '50', 'populate_from': 'None', 'unique_with': '()'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) + }, + u'projects.projectprogress': { + 'Meta': {'ordering': "['order']", 'object_name': 'ProjectProgress'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '500'}), + 'icon': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}), + 'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'progress_range': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.ProjectProgressRange']"}) + }, + u'projects.projectprogressrange': { + 'Meta': {'object_name': 'ProjectProgressRange'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'slug': ('autoslug.fields.AutoSlugField', [], {'unique': 'True', 'max_length': '50', 'populate_from': "'name'", 'unique_with': '()'}) + }, + u'projects.projectteam': { + 'Meta': {'object_name': 'ProjectTeam'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'members': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['accounts.Profile']", 'symmetrical': 'False'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.Project']"}) + }, + u'scout.place': { + 'Meta': {'object_name': 'Place'}, + 'address': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'place'", 'to': u"orm['scout.PostalAddress']"}), + 'geo': ('django.contrib.gis.db.models.fields.PointField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + u'scout.postaladdress': { + 'Meta': {'object_name': 'PostalAddress'}, + 'address_locality': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'address_region': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'country': ('django.db.models.fields.CharField', [], {'max_length': '2'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'post_office_box_number': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}), + 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'street_address': ('django.db.models.fields.TextField', [], {'blank': 'True'}) + } + } + + complete_apps = ['projects'] diff --git a/projects/models.py b/projects/models.py index d142f49..242f0a6 100644 --- a/projects/models.py +++ b/projects/models.py @@ -1,6 +1,7 @@ """ Projects and related models. """ from django.db import models +from django.contrib.auth.models import Group from autoslug.fields import AutoSlugField from taggit.managers import TaggableManager from scout.models import Place @@ -56,6 +57,7 @@ class Project(models.Model): end_date = models.DateField(null=True, blank=True) progress = models.ForeignKey(ProjectProgress, null=True, blank=True) created_on = models.DateTimeField(auto_now_add=True) + groups = models.ManyToManyField(Group, null=True, blank=True) def __unicode__(self): """ pep257, you know I love you. """ @@ -69,6 +71,7 @@ class ProjectTeam(models.Model): .. todo:: this model is probably obsolete. Someones knowing the truth checks it? + Does the project group replaces it ? """ project = models.ForeignKey(Project) From df2b88c6e37d164016464a42646fddfb42760b97 Mon Sep 17 00:00:00 2001 From: Alban Tiberghien Date: Tue, 14 Apr 2015 15:19:57 +0200 Subject: [PATCH 13/21] Update README.md Fixes last name of myself --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9280767..a84a9cd 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ API list: Authors / contributors: - Guillaume Libersat - Simon Sarrazin - - Alban Tiberghen + - Alban Tiberghien - Freddy Limpens - Olivier Cortès From 51a67b130c860a1c27ba9be81ebf23e3cf304fd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cort=C3=A8s?= Date: Tue, 14 Apr 2015 17:11:40 +0200 Subject: [PATCH 14/21] version bump for 1.3. --- dataserver/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dataserver/__init__.py b/dataserver/__init__.py index 40cc6f5..9105fe0 100644 --- a/dataserver/__init__.py +++ b/dataserver/__init__.py @@ -1,3 +1,3 @@ -version = '1.2' +version = '1.3' From 224edd706b2048c67d0a3e31cd51f60d65f00bd8 Mon Sep 17 00:00:00 2001 From: SimonSarazin Date: Fri, 17 Apr 2015 11:24:19 +0200 Subject: [PATCH 15/21] Added community on project model, deleted group Also deleted "groups" as we'll not use Group app --- .../migrations/0013_auto__add_community.py | 138 ++++++++++++++++++ projects/models.py | 3 +- 2 files changed, 140 insertions(+), 1 deletion(-) create mode 100644 projects/migrations/0013_auto__add_community.py diff --git a/projects/migrations/0013_auto__add_community.py b/projects/migrations/0013_auto__add_community.py new file mode 100644 index 0000000..945d089 --- /dev/null +++ b/projects/migrations/0013_auto__add_community.py @@ -0,0 +1,138 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'Community' + db.create_table(u'projects_community', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'])), + )) + db.send_create_signal(u'projects', ['Community']) + + # Removing M2M table for field groups on 'Project' + db.delete_table(db.shorten_name(u'projects_project_groups')) + + + def backwards(self, orm): + # Deleting model 'Community' + db.delete_table(u'projects_community') + + # Adding M2M table for field groups on 'Project' + m2m_table_name = db.shorten_name(u'projects_project_groups') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('project', models.ForeignKey(orm[u'projects.project'], null=False)), + ('group', models.ForeignKey(orm[u'auth.group'], null=False)) + )) + db.create_unique(m2m_table_name, ['project_id', 'group_id']) + + + models = { + u'accounts.profile': { + 'Meta': {'object_name': 'Profile'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mugshot': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'blank': 'True'}), + 'privacy': ('django.db.models.fields.CharField', [], {'default': "'registered'", 'max_length': '15'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': u"orm['auth.User']"}) + }, + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'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', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), + u'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', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + u'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'}), + u'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'}) + }, + u'projects.community': { + 'Meta': {'object_name': 'Community'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.Project']"}) + }, + u'projects.project': { + 'Meta': {'object_name': 'Project'}, + 'baseline': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True', 'blank': 'True'}), + 'begin_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'created_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'location': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['scout.Place']", 'null': 'True', 'blank': 'True'}), + 'progress': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.ProjectProgress']", 'null': 'True', 'blank': 'True'}), + 'slug': ('autoslug.fields.AutoSlugField', [], {'unique': 'True', 'max_length': '50', 'populate_from': 'None', 'unique_with': '()'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) + }, + u'projects.projectprogress': { + 'Meta': {'ordering': "['order']", 'object_name': 'ProjectProgress'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '500'}), + 'icon': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}), + 'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'progress_range': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.ProjectProgressRange']"}) + }, + u'projects.projectprogressrange': { + 'Meta': {'object_name': 'ProjectProgressRange'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'slug': ('autoslug.fields.AutoSlugField', [], {'unique': 'True', 'max_length': '50', 'populate_from': "'name'", 'unique_with': '()'}) + }, + u'projects.projectteam': { + 'Meta': {'object_name': 'ProjectTeam'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'members': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['accounts.Profile']", 'symmetrical': 'False'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.Project']"}) + }, + u'scout.place': { + 'Meta': {'object_name': 'Place'}, + 'address': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'place'", 'to': u"orm['scout.PostalAddress']"}), + 'geo': ('django.contrib.gis.db.models.fields.PointField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + u'scout.postaladdress': { + 'Meta': {'object_name': 'PostalAddress'}, + 'address_locality': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'address_region': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'country': ('django.db.models.fields.CharField', [], {'max_length': '2'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'post_office_box_number': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}), + 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'street_address': ('django.db.models.fields.TextField', [], {'blank': 'True'}) + } + } + + complete_apps = ['projects'] \ No newline at end of file diff --git a/projects/models.py b/projects/models.py index 242f0a6..13053c4 100644 --- a/projects/models.py +++ b/projects/models.py @@ -57,12 +57,13 @@ class Project(models.Model): end_date = models.DateField(null=True, blank=True) progress = models.ForeignKey(ProjectProgress, null=True, blank=True) created_on = models.DateTimeField(auto_now_add=True) - groups = models.ManyToManyField(Group, null=True, blank=True) def __unicode__(self): """ pep257, you know I love you. """ return self.title +class Community(models.Model): + project = models.ForeignKey(Project) # XXX/TODO: obsolete class ProjectTeam(models.Model): From 6f3525f4273fb067ba96585b357fc1f489cfda0f Mon Sep 17 00:00:00 2001 From: SimonSarazin Date: Fri, 17 Apr 2015 11:44:00 +0200 Subject: [PATCH 16/21] Added a comment and a related name --- projects/models.py | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/projects/models.py b/projects/models.py index 13053c4..8cbb7ea 100644 --- a/projects/models.py +++ b/projects/models.py @@ -6,9 +6,7 @@ from taggit.managers import TaggableManager from scout.models import Place from accounts.models import Profile -# from django.db.models.signals import post_save -# from django.dispatch.dispatcher import receiver - + class ProjectProgressRange(models.Model): @@ -57,13 +55,12 @@ class Project(models.Model): end_date = models.DateField(null=True, blank=True) progress = models.ForeignKey(ProjectProgress, null=True, blank=True) created_on = models.DateTimeField(auto_now_add=True) + groups = models.ManyToManyField(Group, null=True, blank=True) def __unicode__(self): """ pep257, you know I love you. """ return self.title -class Community(models.Model): - project = models.ForeignKey(Project) # XXX/TODO: obsolete class ProjectTeam(models.Model): @@ -71,15 +68,9 @@ class ProjectTeam(models.Model): """ A project team. .. todo:: this model is probably obsolete. - Someones knowing the truth checks it? - Does the project group replaces it ? + Someones knowing the truth checks it? + Does the project group replaces it ? """ - + project = models.ForeignKey(Project) - members = models.ManyToManyField(Profile) - - -@receiver(post_save, sender=Project) -def create_project_team(sender, created, instance, **kwargs): - if created: - ProjectTeam.objects.create(project=instance) + members = models.ManyToManyField(Profile) \ No newline at end of file From e36f9bc21e7f6154b13503199fc0e836bd7d9429 Mon Sep 17 00:00:00 2001 From: SimonSarazin Date: Fri, 17 Apr 2015 11:47:57 +0200 Subject: [PATCH 17/21] Changed again related name and modified comment --- projects/models.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/projects/models.py b/projects/models.py index 8cbb7ea..b7bc22b 100644 --- a/projects/models.py +++ b/projects/models.py @@ -61,6 +61,13 @@ def __unicode__(self): """ pep257, you know I love you. """ return self.title +class ProjectCommunity(models.Model): + """ + This class helps us to find the whole community linked to a project. We use ObjectProfileLink in + order to record a link between a user profile and the ProjectCommunity. With ObjectProfileLink, + we can have a "level of implication" of the member in the community + """ + project = models.ForeignKey(Project, related_name='community')) # XXX/TODO: obsolete class ProjectTeam(models.Model): @@ -73,4 +80,4 @@ class ProjectTeam(models.Model): """ project = models.ForeignKey(Project) - members = models.ManyToManyField(Profile) \ No newline at end of file + members = models.ManyToManyField(Profile) From e91873d0533c0b2075922e336209ae0d97b9f30a Mon Sep 17 00:00:00 2001 From: SimonSarazin Date: Fri, 17 Apr 2015 12:17:46 +0200 Subject: [PATCH 18/21] Community class is not essential for the moment, i deleted it --- projects/models.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/projects/models.py b/projects/models.py index b7bc22b..8cbb7ea 100644 --- a/projects/models.py +++ b/projects/models.py @@ -61,13 +61,6 @@ def __unicode__(self): """ pep257, you know I love you. """ return self.title -class ProjectCommunity(models.Model): - """ - This class helps us to find the whole community linked to a project. We use ObjectProfileLink in - order to record a link between a user profile and the ProjectCommunity. With ObjectProfileLink, - we can have a "level of implication" of the member in the community - """ - project = models.ForeignKey(Project, related_name='community')) # XXX/TODO: obsolete class ProjectTeam(models.Model): @@ -80,4 +73,4 @@ class ProjectTeam(models.Model): """ project = models.ForeignKey(Project) - members = models.ManyToManyField(Profile) + members = models.ManyToManyField(Profile) \ No newline at end of file From 177864762f57372ae68be126f827bb9bb6ebaf7c Mon Sep 17 00:00:00 2001 From: SimonSarazin Date: Fri, 17 Apr 2015 12:22:55 +0200 Subject: [PATCH 19/21] Updated migration --- ...14_auto__del_community__del_projectteam.py | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 projects/migrations/0014_auto__del_community__del_projectteam.py diff --git a/projects/migrations/0014_auto__del_community__del_projectteam.py b/projects/migrations/0014_auto__del_community__del_projectteam.py new file mode 100644 index 0000000..677c0c6 --- /dev/null +++ b/projects/migrations/0014_auto__del_community__del_projectteam.py @@ -0,0 +1,94 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Deleting model 'Community' + db.delete_table(u'projects_community') + + # Deleting model 'ProjectTeam' + db.delete_table(u'projects_projectteam') + + # Removing M2M table for field members on 'ProjectTeam' + db.delete_table(db.shorten_name(u'projects_projectteam_members')) + + + def backwards(self, orm): + # Adding model 'Community' + db.create_table(u'projects_community', ( + ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'])), + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + )) + db.send_create_signal(u'projects', ['Community']) + + # Adding model 'ProjectTeam' + db.create_table(u'projects_projectteam', ( + ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'])), + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + )) + db.send_create_signal(u'projects', ['ProjectTeam']) + + # Adding M2M table for field members on 'ProjectTeam' + m2m_table_name = db.shorten_name(u'projects_projectteam_members') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('projectteam', models.ForeignKey(orm[u'projects.projectteam'], null=False)), + ('profile', models.ForeignKey(orm[u'accounts.profile'], null=False)) + )) + db.create_unique(m2m_table_name, ['projectteam_id', 'profile_id']) + + + models = { + u'projects.project': { + 'Meta': {'object_name': 'Project'}, + 'baseline': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True', 'blank': 'True'}), + 'begin_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'created_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'location': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['scout.Place']", 'null': 'True', 'blank': 'True'}), + 'progress': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.ProjectProgress']", 'null': 'True', 'blank': 'True'}), + 'slug': ('autoslug.fields.AutoSlugField', [], {'unique': 'True', 'max_length': '50', 'populate_from': 'None', 'unique_with': '()'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) + }, + u'projects.projectprogress': { + 'Meta': {'ordering': "['order']", 'object_name': 'ProjectProgress'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '500'}), + 'icon': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}), + 'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'progress_range': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.ProjectProgressRange']"}) + }, + u'projects.projectprogressrange': { + 'Meta': {'object_name': 'ProjectProgressRange'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'slug': ('autoslug.fields.AutoSlugField', [], {'unique': 'True', 'max_length': '50', 'populate_from': "'name'", 'unique_with': '()'}) + }, + u'scout.place': { + 'Meta': {'object_name': 'Place'}, + 'address': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'place'", 'to': u"orm['scout.PostalAddress']"}), + 'geo': ('django.contrib.gis.db.models.fields.PointField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + u'scout.postaladdress': { + 'Meta': {'object_name': 'PostalAddress'}, + 'address_locality': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'address_region': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'country': ('django.db.models.fields.CharField', [], {'max_length': '2'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'post_office_box_number': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}), + 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'street_address': ('django.db.models.fields.TextField', [], {'blank': 'True'}) + } + } + + complete_apps = ['projects'] \ No newline at end of file From 0abd445eeee7f61489c4543de08becfed62dc7ea Mon Sep 17 00:00:00 2001 From: SimonSarazin Date: Mon, 20 Apr 2015 12:34:44 +0200 Subject: [PATCH 20/21] removed projectteam migrations --- .../migrations/0013_auto__add_community.py | 138 ------------------ ...14_auto__del_community__del_projectteam.py | 94 ------------ 2 files changed, 232 deletions(-) delete mode 100644 projects/migrations/0013_auto__add_community.py delete mode 100644 projects/migrations/0014_auto__del_community__del_projectteam.py diff --git a/projects/migrations/0013_auto__add_community.py b/projects/migrations/0013_auto__add_community.py deleted file mode 100644 index 945d089..0000000 --- a/projects/migrations/0013_auto__add_community.py +++ /dev/null @@ -1,138 +0,0 @@ -# -*- coding: utf-8 -*- -from south.utils import datetime_utils as datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding model 'Community' - db.create_table(u'projects_community', ( - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'])), - )) - db.send_create_signal(u'projects', ['Community']) - - # Removing M2M table for field groups on 'Project' - db.delete_table(db.shorten_name(u'projects_project_groups')) - - - def backwards(self, orm): - # Deleting model 'Community' - db.delete_table(u'projects_community') - - # Adding M2M table for field groups on 'Project' - m2m_table_name = db.shorten_name(u'projects_project_groups') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('project', models.ForeignKey(orm[u'projects.project'], null=False)), - ('group', models.ForeignKey(orm[u'auth.group'], null=False)) - )) - db.create_unique(m2m_table_name, ['project_id', 'group_id']) - - - models = { - u'accounts.profile': { - 'Meta': {'object_name': 'Profile'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mugshot': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'blank': 'True'}), - 'privacy': ('django.db.models.fields.CharField', [], {'default': "'registered'", 'max_length': '15'}), - 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': u"orm['auth.User']"}) - }, - u'auth.group': { - 'Meta': {'object_name': 'Group'}, - u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - u'auth.permission': { - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - u'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', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), - u'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', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - u'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'}), - u'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'}) - }, - u'projects.community': { - 'Meta': {'object_name': 'Community'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.Project']"}) - }, - u'projects.project': { - 'Meta': {'object_name': 'Project'}, - 'baseline': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True', 'blank': 'True'}), - 'begin_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), - 'created_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'location': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['scout.Place']", 'null': 'True', 'blank': 'True'}), - 'progress': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.ProjectProgress']", 'null': 'True', 'blank': 'True'}), - 'slug': ('autoslug.fields.AutoSlugField', [], {'unique': 'True', 'max_length': '50', 'populate_from': 'None', 'unique_with': '()'}), - 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) - }, - u'projects.projectprogress': { - 'Meta': {'ordering': "['order']", 'object_name': 'ProjectProgress'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '500'}), - 'icon': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}), - 'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), - 'progress_range': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.ProjectProgressRange']"}) - }, - u'projects.projectprogressrange': { - 'Meta': {'object_name': 'ProjectProgressRange'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'slug': ('autoslug.fields.AutoSlugField', [], {'unique': 'True', 'max_length': '50', 'populate_from': "'name'", 'unique_with': '()'}) - }, - u'projects.projectteam': { - 'Meta': {'object_name': 'ProjectTeam'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'members': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['accounts.Profile']", 'symmetrical': 'False'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.Project']"}) - }, - u'scout.place': { - 'Meta': {'object_name': 'Place'}, - 'address': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'place'", 'to': u"orm['scout.PostalAddress']"}), - 'geo': ('django.contrib.gis.db.models.fields.PointField', [], {}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - u'scout.postaladdress': { - 'Meta': {'object_name': 'PostalAddress'}, - 'address_locality': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), - 'address_region': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), - 'country': ('django.db.models.fields.CharField', [], {'max_length': '2'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'post_office_box_number': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}), - 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'street_address': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - } - } - - complete_apps = ['projects'] \ No newline at end of file diff --git a/projects/migrations/0014_auto__del_community__del_projectteam.py b/projects/migrations/0014_auto__del_community__del_projectteam.py deleted file mode 100644 index 677c0c6..0000000 --- a/projects/migrations/0014_auto__del_community__del_projectteam.py +++ /dev/null @@ -1,94 +0,0 @@ -# -*- coding: utf-8 -*- -from south.utils import datetime_utils as datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Deleting model 'Community' - db.delete_table(u'projects_community') - - # Deleting model 'ProjectTeam' - db.delete_table(u'projects_projectteam') - - # Removing M2M table for field members on 'ProjectTeam' - db.delete_table(db.shorten_name(u'projects_projectteam_members')) - - - def backwards(self, orm): - # Adding model 'Community' - db.create_table(u'projects_community', ( - ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'])), - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - )) - db.send_create_signal(u'projects', ['Community']) - - # Adding model 'ProjectTeam' - db.create_table(u'projects_projectteam', ( - ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'])), - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - )) - db.send_create_signal(u'projects', ['ProjectTeam']) - - # Adding M2M table for field members on 'ProjectTeam' - m2m_table_name = db.shorten_name(u'projects_projectteam_members') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('projectteam', models.ForeignKey(orm[u'projects.projectteam'], null=False)), - ('profile', models.ForeignKey(orm[u'accounts.profile'], null=False)) - )) - db.create_unique(m2m_table_name, ['projectteam_id', 'profile_id']) - - - models = { - u'projects.project': { - 'Meta': {'object_name': 'Project'}, - 'baseline': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True', 'blank': 'True'}), - 'begin_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), - 'created_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'location': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['scout.Place']", 'null': 'True', 'blank': 'True'}), - 'progress': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.ProjectProgress']", 'null': 'True', 'blank': 'True'}), - 'slug': ('autoslug.fields.AutoSlugField', [], {'unique': 'True', 'max_length': '50', 'populate_from': 'None', 'unique_with': '()'}), - 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) - }, - u'projects.projectprogress': { - 'Meta': {'ordering': "['order']", 'object_name': 'ProjectProgress'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '500'}), - 'icon': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}), - 'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), - 'progress_range': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.ProjectProgressRange']"}) - }, - u'projects.projectprogressrange': { - 'Meta': {'object_name': 'ProjectProgressRange'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'slug': ('autoslug.fields.AutoSlugField', [], {'unique': 'True', 'max_length': '50', 'populate_from': "'name'", 'unique_with': '()'}) - }, - u'scout.place': { - 'Meta': {'object_name': 'Place'}, - 'address': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'place'", 'to': u"orm['scout.PostalAddress']"}), - 'geo': ('django.contrib.gis.db.models.fields.PointField', [], {}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - u'scout.postaladdress': { - 'Meta': {'object_name': 'PostalAddress'}, - 'address_locality': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), - 'address_region': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), - 'country': ('django.db.models.fields.CharField', [], {'max_length': '2'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'post_office_box_number': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}), - 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'street_address': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - } - } - - complete_apps = ['projects'] \ No newline at end of file From f6115eead170b9c01a0b887d74d866aceab3dbc9 Mon Sep 17 00:00:00 2001 From: SimonSarazin Date: Mon, 20 Apr 2015 12:56:04 +0200 Subject: [PATCH 21/21] Deleted groups and projectteam --- .../migrations/0013_auto__del_projectteam.py | 96 +++++++++++++++++++ projects/models.py | 15 --- 2 files changed, 96 insertions(+), 15 deletions(-) create mode 100644 projects/migrations/0013_auto__del_projectteam.py diff --git a/projects/migrations/0013_auto__del_projectteam.py b/projects/migrations/0013_auto__del_projectteam.py new file mode 100644 index 0000000..6089d87 --- /dev/null +++ b/projects/migrations/0013_auto__del_projectteam.py @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Deleting model 'ProjectTeam' + db.delete_table(u'projects_projectteam') + + # Removing M2M table for field members on 'ProjectTeam' + db.delete_table(db.shorten_name(u'projects_projectteam_members')) + + # Removing M2M table for field groups on 'Project' + db.delete_table(db.shorten_name(u'projects_project_groups')) + + + def backwards(self, orm): + # Adding model 'ProjectTeam' + db.create_table(u'projects_projectteam', ( + ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['projects.Project'])), + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + )) + db.send_create_signal(u'projects', ['ProjectTeam']) + + # Adding M2M table for field members on 'ProjectTeam' + m2m_table_name = db.shorten_name(u'projects_projectteam_members') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('projectteam', models.ForeignKey(orm[u'projects.projectteam'], null=False)), + ('profile', models.ForeignKey(orm[u'accounts.profile'], null=False)) + )) + db.create_unique(m2m_table_name, ['projectteam_id', 'profile_id']) + + # Adding M2M table for field groups on 'Project' + m2m_table_name = db.shorten_name(u'projects_project_groups') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('project', models.ForeignKey(orm[u'projects.project'], null=False)), + ('group', models.ForeignKey(orm[u'auth.group'], null=False)) + )) + db.create_unique(m2m_table_name, ['project_id', 'group_id']) + + + models = { + u'projects.project': { + 'Meta': {'object_name': 'Project'}, + 'baseline': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True', 'blank': 'True'}), + 'begin_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'created_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'location': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['scout.Place']", 'null': 'True', 'blank': 'True'}), + 'progress': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.ProjectProgress']", 'null': 'True', 'blank': 'True'}), + 'slug': ('autoslug.fields.AutoSlugField', [], {'unique': 'True', 'max_length': '50', 'populate_from': 'None', 'unique_with': '()'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) + }, + u'projects.projectprogress': { + 'Meta': {'ordering': "['order']", 'object_name': 'ProjectProgress'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '500'}), + 'icon': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}), + 'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'progress_range': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['projects.ProjectProgressRange']"}) + }, + u'projects.projectprogressrange': { + 'Meta': {'object_name': 'ProjectProgressRange'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'slug': ('autoslug.fields.AutoSlugField', [], {'unique': 'True', 'max_length': '50', 'populate_from': "'name'", 'unique_with': '()'}) + }, + u'scout.place': { + 'Meta': {'object_name': 'Place'}, + 'address': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'place'", 'to': u"orm['scout.PostalAddress']"}), + 'geo': ('django.contrib.gis.db.models.fields.PointField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + u'scout.postaladdress': { + 'Meta': {'object_name': 'PostalAddress'}, + 'address_locality': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'address_region': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'country': ('django.db.models.fields.CharField', [], {'max_length': '2'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'post_office_box_number': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}), + 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'street_address': ('django.db.models.fields.TextField', [], {'blank': 'True'}) + } + } + + complete_apps = ['projects'] \ No newline at end of file diff --git a/projects/models.py b/projects/models.py index 8cbb7ea..cd8d861 100644 --- a/projects/models.py +++ b/projects/models.py @@ -55,22 +55,7 @@ class Project(models.Model): end_date = models.DateField(null=True, blank=True) progress = models.ForeignKey(ProjectProgress, null=True, blank=True) created_on = models.DateTimeField(auto_now_add=True) - groups = models.ManyToManyField(Group, null=True, blank=True) def __unicode__(self): """ pep257, you know I love you. """ return self.title - - -# XXX/TODO: obsolete -class ProjectTeam(models.Model): - - """ A project team. - - .. todo:: this model is probably obsolete. - Someones knowing the truth checks it? - Does the project group replaces it ? - """ - - project = models.ForeignKey(Project) - members = models.ManyToManyField(Profile) \ No newline at end of file