From 85a3ac082b86de60711a9f3e927cd983390870c8 Mon Sep 17 00:00:00 2001 From: James Graham Date: Wed, 19 Feb 2020 13:15:53 +0000 Subject: [PATCH] feat(activities): Add activity types and mediums resolves #8 #11 #12 --- activities/admin.py | 10 ++++ .../migrations/0002_activity_type_medium.py | 52 +++++++++++++++++++ activities/models.py | 52 ++++++++++++++++++- 3 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 activities/migrations/0002_activity_type_medium.py diff --git a/activities/admin.py b/activities/admin.py index 2a2d602..ea64812 100644 --- a/activities/admin.py +++ b/activities/admin.py @@ -7,6 +7,16 @@ from django.contrib import admin from . import models +@admin.register(models.ActivityType) +class ActivityTypeAdmin(admin.ModelAdmin): + pass + + +@admin.register(models.ActivityMedium) +class ActivityMediumAdmin(admin.ModelAdmin): + pass + + @admin.register(models.ActivitySeries) class ActivitySeriesAdmin(admin.ModelAdmin): pass diff --git a/activities/migrations/0002_activity_type_medium.py b/activities/migrations/0002_activity_type_medium.py new file mode 100644 index 0000000..da0fcf4 --- /dev/null +++ b/activities/migrations/0002_activity_type_medium.py @@ -0,0 +1,52 @@ +# Generated by Django 2.2.10 on 2020-02-19 13:01 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('activities', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='ActivityMedium', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255, unique=True)), + ], + ), + migrations.CreateModel( + name='ActivityType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255, unique=True)), + ], + ), + migrations.AddField( + model_name='activity', + name='medium', + field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to='activities.ActivityMedium'), + preserve_default=False, + ), + migrations.AddField( + model_name='activity', + name='type', + field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to='activities.ActivityType'), + preserve_default=False, + ), + migrations.AddField( + model_name='activityseries', + name='medium', + field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to='activities.ActivityMedium'), + preserve_default=False, + ), + migrations.AddField( + model_name='activityseries', + name='type', + field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to='activities.ActivityType'), + preserve_default=False, + ), + ] diff --git a/activities/models.py b/activities/models.py index f1fe338..286dc06 100644 --- a/activities/models.py +++ b/activities/models.py @@ -1,11 +1,40 @@ from django.db import models +class ActivityType(models.Model): + """ + Representation of the type of activity being conducted. + + Examples may include: 'research activity' or 'stakeholder engagement'. + """ + #: Name of this type of activity + name = models.CharField(max_length=255, + unique=True, + blank=False, null=False) + + def __str__(self) -> str: + return self.name + + +class ActivityMedium(models.Model): + """ + Representation of the medium via which the activity is conducted. + + Examples may include: 'face to face' or 'virtual'. + """ + #: Name of this medium + name = models.CharField(max_length=255, + unique=True, + blank=False, null=False) + + def __str__(self) -> str: + return self.name + + class ActivitySeries(models.Model): """ A series of related :class:`Activity`s """ - class Meta: verbose_name_plural = 'activity series' @@ -13,6 +42,16 @@ class ActivitySeries(models.Model): name = models.CharField(max_length=1023, blank=False, null=False) + #: What type of activity does this series represent? + type = models.ForeignKey(ActivityType, + on_delete=models.PROTECT, + blank=False, null=False) + + #: How are activities in this series typically conducted? + medium = models.ForeignKey(ActivityMedium, + on_delete=models.PROTECT, + blank=False, null=False) + def __str__(self) -> str: return self.name @@ -21,7 +60,6 @@ class Activity(models.Model): """ An instance of an activity - e.g. a workshop """ - class Meta: verbose_name_plural = 'activities' @@ -34,5 +72,15 @@ class Activity(models.Model): on_delete=models.PROTECT, blank=True, null=True) + #: What type of activity does this series represent? + type = models.ForeignKey(ActivityType, + on_delete=models.PROTECT, + blank=False, null=False) + + #: How are activities in this series typically conducted? + medium = models.ForeignKey(ActivityMedium, + on_delete=models.PROTECT, + blank=False, null=False) + def __str__(self) -> str: return self.name