diff --git a/vrobbler/apps/people/__init__.py b/vrobbler/apps/people/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vrobbler/apps/people/admin.py b/vrobbler/apps/people/admin.py new file mode 100644 index 0000000..9662e72 --- /dev/null +++ b/vrobbler/apps/people/admin.py @@ -0,0 +1,10 @@ +from django.contrib import admin +from people.models import Person + + +@admin.register(Person) +class PersonAdmin(admin.ModelAdmin): + date_hierarchy = "created" + list_display = ("name", "bgg_username", "bgstat_id") + ordering = ("-created",) + search_fields = ("name",) diff --git a/vrobbler/apps/people/migrations/0001_initial.py b/vrobbler/apps/people/migrations/0001_initial.py new file mode 100644 index 0000000..1562f23 --- /dev/null +++ b/vrobbler/apps/people/migrations/0001_initial.py @@ -0,0 +1,74 @@ +# Generated by Django 4.2.19 on 2025-07-02 14:59 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import django_extensions.db.fields + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name="Person", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "created", + django_extensions.db.fields.CreationDateTimeField( + auto_now_add=True, verbose_name="created" + ), + ), + ( + "modified", + django_extensions.db.fields.ModificationDateTimeField( + auto_now=True, verbose_name="modified" + ), + ), + ( + "name", + models.CharField(blank=True, max_length=100, null=True), + ), + ( + "bgstat_id", + models.CharField(blank=True, max_length=100, null=True), + ), + ( + "bgg_username", + models.CharField(blank=True, max_length=100, null=True), + ), + ( + "lichess_username", + models.CharField(blank=True, max_length=100, null=True), + ), + ("bio", models.TextField(blank=True, null=True)), + ( + "user", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.DO_NOTHING, + to=settings.AUTH_USER_MODEL, + ), + ), + ], + options={ + "get_latest_by": "modified", + "abstract": False, + }, + ), + ] diff --git a/vrobbler/apps/people/migrations/__init__.py b/vrobbler/apps/people/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vrobbler/apps/people/models.py b/vrobbler/apps/people/models.py new file mode 100644 index 0000000..a4a0f3b --- /dev/null +++ b/vrobbler/apps/people/models.py @@ -0,0 +1,17 @@ +from django.contrib.auth import get_user_model +from django.db import models +from django_extensions.db.models import TimeStampedModel + +User = get_user_model() +BNULL = {"blank": True, "null": True} + + +class Person(TimeStampedModel): + """A non-system user model that can be optionally associated with a User.""" + + user = models.ForeignKey(User, on_delete=models.DO_NOTHING, **BNULL) + name = models.CharField(max_length=100, **BNULL) + bgstat_id = models.CharField(max_length=100, **BNULL) + bgg_username = models.CharField(max_length=100, **BNULL) + lichess_username = models.CharField(max_length=100, **BNULL) + bio = models.TextField(**BNULL) diff --git a/vrobbler/settings.py b/vrobbler/settings.py index 0f3444e..e1c4546 100644 --- a/vrobbler/settings.py +++ b/vrobbler/settings.py @@ -134,6 +134,7 @@ INSTALLED_APPS = [ "encrypted_field", "profiles", "scrobbles", + "people", "videos", "music", "podcasts",