From 25881d4cb3d64029bd42d0e4899e16c8b06fcd22 Mon Sep 17 00:00:00 2001 From: stupidcomputer Date: Wed, 24 Jul 2024 13:13:07 -0500 Subject: [PATCH] feature: add a Category model - add a Category model that represents the CCE defined categories for various legislation --- franklincce/explorer/admin.py | 1 + ...category_alter_legislativetext_category.py | 26 +++++++++++++++++++ franklincce/explorer/models.py | 21 +++++++++++++-- .../templates/explorer/legislation.html | 2 ++ franklincce/explorer/urls.py | 4 ++- franklincce/explorer/views.py | 3 +++ 6 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 franklincce/explorer/migrations/0002_category_alter_legislativetext_category.py diff --git a/franklincce/explorer/admin.py b/franklincce/explorer/admin.py index a034f2f..6b3895b 100644 --- a/franklincce/explorer/admin.py +++ b/franklincce/explorer/admin.py @@ -15,6 +15,7 @@ to_register = [ [models.School], [models.Country], [models.Sponsor], + [models.Category], ] for i in to_register: admin.site.register(*i) \ No newline at end of file diff --git a/franklincce/explorer/migrations/0002_category_alter_legislativetext_category.py b/franklincce/explorer/migrations/0002_category_alter_legislativetext_category.py new file mode 100644 index 0000000..cf82f7a --- /dev/null +++ b/franklincce/explorer/migrations/0002_category_alter_legislativetext_category.py @@ -0,0 +1,26 @@ +# Generated by Django 4.2.14 on 2024-07-24 17:58 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('explorer', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Category', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=256)), + ], + ), + migrations.AlterField( + model_name='legislativetext', + name='category', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='explorer.category'), + ), + ] diff --git a/franklincce/explorer/models.py b/franklincce/explorer/models.py index a06f2dc..948e3a2 100644 --- a/franklincce/explorer/models.py +++ b/franklincce/explorer/models.py @@ -54,6 +54,19 @@ class Sponsor(models.Model): our_name = __class__.__name__ return reverse("{}.detail".format(our_name), kwargs={"model_id": self.id}) +class Category(models.Model): + name = models.CharField(max_length=256) + + class Meta: + verbose_name_plural = "Categories" + + def __str__(self): + return "{}".format(self.name) + + def get_absolute_url(self): + our_name = __class__.__name__ + return reverse("{}.detail".format(our_name), kwargs={"model_id": self.id}) + class LegislationBook(models.Model): class Meta: verbose_name = "Book" @@ -105,6 +118,10 @@ class LegislationBook(models.Model): text["country"] = text["country"].replace(" 2", "") text["country"] = InstantiateIfNone(Country, text["country"]) + if not text["category"] or text["category"] == "Select One--": + text["category"] = "No category" + text["category"] = InstantiateIfNone(Category, text["category"]) + sponsors = text["sponsors"].split(', ') sponsors = [InstantiateIfNone(Sponsor, sponsor) for sponsor in sponsors] @@ -146,7 +163,7 @@ class LegislativeText(models.Model): text = models.TextField() year = models.IntegerField() committee = models.IntegerField() - category = models.CharField(max_length=256) + category = models.ForeignKey(Category, on_delete=models.CASCADE) docket_order = models.IntegerField() school = models.ForeignKey(School, on_delete=models.CASCADE) sponsors = models.ManyToManyField(Sponsor, blank=True) @@ -203,4 +220,4 @@ class LegislationClassification(models.Model): our_name = __class__.__name__ return reverse("{}.detail".format(our_name), kwargs={"model_id": self.id}) -models_in_index = [LegislationClassification, School, Country, Sponsor] \ No newline at end of file +models_in_index = [LegislationClassification, School, Country, Sponsor, Category] \ No newline at end of file diff --git a/franklincce/explorer/templates/explorer/legislation.html b/franklincce/explorer/templates/explorer/legislation.html index dea6ba9..c8b20dc 100644 --- a/franklincce/explorer/templates/explorer/legislation.html +++ b/franklincce/explorer/templates/explorer/legislation.html @@ -24,6 +24,8 @@

The delegates above represented the Delegation of {{ legislation.country }}.

{% endif %} +

This legislation was filed in the {{ legislation.category }} category

+

Presented as part of the {{ legislation.from_book.name }} conference

diff --git a/franklincce/explorer/urls.py b/franklincce/explorer/urls.py index d02a913..c0ef9bd 100644 --- a/franklincce/explorer/urls.py +++ b/franklincce/explorer/urls.py @@ -15,8 +15,10 @@ urlpatterns = [ path("schools//", views.get_all_by_school, name="School.detail"), path("countries//", views.get_all_by_country, name="Country.detail"), path("sponsors//", views.get_all_by_sponsor, name="Sponsor.detail"), + path("categories//", views.get_all_by_category, name="Category.detail"), path("schools/", views.get_all_schools, name="School"), path("countries/", views.get_all_countries, name="Country"), path("groups/", views.return_groups, name="Groups"), - path("sponsors/", views.get_all_sponsors, name="Sponsor") + path("sponsors/", views.get_all_sponsors, name="Sponsor"), + path("categories/", views.get_all_categories, name="Category"), ] diff --git a/franklincce/explorer/views.py b/franklincce/explorer/views.py index 46aa244..0362db8 100644 --- a/franklincce/explorer/views.py +++ b/franklincce/explorer/views.py @@ -9,6 +9,7 @@ from .models import ( School, Country, Sponsor, + Category, models_in_index, ) @@ -132,8 +133,10 @@ def return_groups(request): get_all_by_school = get_all_by_x(School) get_all_by_country = get_all_by_x(Country) get_all_by_sponsor = get_all_by_x(Sponsor) +get_all_by_category = get_all_by_x(Category) get_all_schools = get_all_xs(School) get_all_countries = get_all_xs(Country) get_all_sponsors = get_all_xs(Sponsor) +get_all_categories = get_all_xs(Category) get_all_classifications = get_all_xs(LegislationClassification) \ No newline at end of file