add a model for legislation classification, making topics

now you can make topics!
This commit is contained in:
stupidcomputer 2024-06-28 16:36:06 -05:00
parent f415713bdb
commit 3fa153ee59
9 changed files with 136 additions and 6 deletions

View File

@ -1,6 +1,6 @@
from django.contrib import admin
from .models import LegislativeText, LegislationBook
from explorer import models
class LegislativeTextAdmin(admin.ModelAdmin):
list_display = ('__str__', 'legislation_title', 'school')
@ -8,5 +8,11 @@ class LegislativeTextAdmin(admin.ModelAdmin):
class LegislationBookAdmin(admin.ModelAdmin):
exclude = ("has_performed_export",)
admin.site.register(LegislativeText, LegislativeTextAdmin)
admin.site.register(LegislationBook, LegislationBookAdmin)
to_register = [
[models.LegislativeText, LegislativeTextAdmin],
[models.LegislationBook, LegislationBookAdmin],
[models.LegislationClassification]
]
for i in to_register:
admin.site.register(*i)
print(i)

View File

@ -0,0 +1,21 @@
# Generated by Django 4.2.12 on 2024-06-28 20:53
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('explorer', '0003_legislationbook_has_performed_export_and_more'),
]
operations = [
migrations.CreateModel(
name='LegislationClassification',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(help_text='Name of this classification.', max_length=256)),
('text_to_match', models.CharField(help_text='a comma seperated list of keywords to include in the classification. spaces and dashes are discluded.', max_length=256)),
],
),
]

View File

@ -0,0 +1,19 @@
# Generated by Django 4.2.12 on 2024-06-28 21:07
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('explorer', '0004_legislationclassification'),
]
operations = [
migrations.AddField(
model_name='legislationclassification',
name='obvious_change',
field=models.CharField(default='test', help_text='Name of this classification.', max_length=256),
preserve_default=False,
),
]

View File

@ -0,0 +1,17 @@
# Generated by Django 4.2.12 on 2024-06-28 21:08
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('explorer', '0005_legislationclassification_obvious_change'),
]
operations = [
migrations.RemoveField(
model_name='legislationclassification',
name='obvious_change',
),
]

View File

@ -31,8 +31,6 @@ class LegislationBook(models.Model):
has_performed_export = models.BooleanField(default=False)
def save(self, **kwargs):
super().save(**kwargs)
if not self.has_performed_export:
self.has_performed_export = True
super().save(**kwargs)
@ -136,3 +134,13 @@ class LegislativeText(models.Model):
if self.assembly in ["RGA", "BGA", "WGA", "GEN"]:
return True
return False
class LegislationClassification(models.Model):
name = models.CharField(max_length=256, help_text="Name of this classification.")
text_to_match = models.CharField(
max_length=256,
help_text="a comma seperated list of keywords to include in the classification. spaces and dashes are discluded."
)
def __str__(self):
return "{}".format(self.name)

View File

@ -0,0 +1,15 @@
{% extends "explorer/base.html" %}
{% block content %}
<link rel="stylesheet" type="text/css" href="/static/tn.css" />
<div class="boxed">
<h1>All topics</h1>
<ul>
{% for topic in classifications %}
<li><a href="/explorer/topics/{{ topic.id }}">{{ topic.name }}</a></li>
{% endfor %}
</ul>
</div>
{% endblock content %}

View File

@ -0,0 +1,15 @@
{% extends "explorer/base.html" %}
{% block content %}
<link rel="stylesheet" type="text/css" href="/static/tn.css" />
<div class="boxed">
<h1>{{ result_name }}</h1>
<ul>
{% for text in legislation %}
<li><a href="/explorer/legislation/{{ text.id }}">{{ text.legislation_title }}</a></li>
{% endfor %}
</ul>
</div>
{% endblock content %}

View File

@ -8,4 +8,6 @@ urlpatterns = [
path("stats/", views.stats, name="stats"),
path("legislation/<int:legislation_id>/", views.view_legislation, name="viewleg"),
path("conference/<int:conference_id>/", views.view_conference, name="viewconf"),
path("topics/<int:classification_id>/", views.get_all_classified_by_id, name="classificationview"),
path("topics/", views.get_all_classifications, name="classificationview"),
]

View File

@ -1,7 +1,7 @@
from django.shortcuts import get_object_or_404, render
from django.http import HttpResponse
from .models import LegislativeText, LegislationBook
from .models import LegislativeText, LegislationBook, LegislationClassification
from random import sample
@ -53,3 +53,30 @@ def stats(request):
"white_ga": len(LegislativeText.objects.filter(assembly="WGA")),
}
return render(request, "explorer/stats.html", context)
def get_all_classifications(request):
classifications = LegislationClassification.objects.all()
return render(request, "explorer/classifications.html", {
"classifications": classifications,
})
def get_all_classified_by_id(request, classification_id):
classification = get_object_or_404(LegislationClassification, pk=classification_id)
# this is very expensive; make a way for this to be cached please?
all_texts = LegislativeText.objects.all()
all_terms = classification.text_to_match.split(',')
all_terms = [i.lower() for i in all_terms]
matches = []
for text in all_texts:
for term in all_terms:
if term in text.text.lower():
matches.append(text)
break
return render(request, "explorer/results.html", {
"legislation": matches,
"result_name": "All legislation in topic {}".format(classification.name)
})