From 3b5a9595a2e0848347af4ca162191cacb18b1960 Mon Sep 17 00:00:00 2001 From: imperosol Date: Fri, 1 May 2026 12:37:02 +0200 Subject: [PATCH] add update date to SithFile model --- core/admin.py | 2 +- .../0050_alter_sithfile_moderator.py | 55 +++++++++++++++++++ core/models.py | 7 ++- sas/admin.py | 4 +- sas/api.py | 2 +- sas/schemas.py | 14 ++++- 6 files changed, 74 insertions(+), 10 deletions(-) create mode 100644 core/migrations/0050_alter_sithfile_moderator.py diff --git a/core/admin.py b/core/admin.py index 74c0c0ab..ca7efbe1 100644 --- a/core/admin.py +++ b/core/admin.py @@ -99,7 +99,7 @@ class PageAdmin(admin.ModelAdmin): @admin.register(SithFile) class SithFileAdmin(admin.ModelAdmin): - list_display = ("name", "owner", "size", "date", "is_in_sas") + list_display = ("name", "owner", "size", "created_at", "is_in_sas") autocomplete_fields = ("parent", "owner", "moderator") search_fields = ("name", "parent__name") diff --git a/core/migrations/0050_alter_sithfile_moderator.py b/core/migrations/0050_alter_sithfile_moderator.py new file mode 100644 index 00000000..86401016 --- /dev/null +++ b/core/migrations/0050_alter_sithfile_moderator.py @@ -0,0 +1,55 @@ +# Generated by Django 5.2.12 on 2026-05-01 08:59 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models +from django.db.migrations.state import StateApps +from django.db.models import F + + +def set_updated_at(apps: StateApps, schema_editor): + SithFile = apps.get_model("core", "SithFile") + SithFile.objects.update(updated_at=F("created_at")) + + +class Migration(migrations.Migration): + dependencies = [("core", "0049_user_whitelisted_users")] + + operations = [ + migrations.AlterField( + model_name="sithfile", + name="moderator", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="moderated_files", + to=settings.AUTH_USER_MODEL, + verbose_name="owner", + ), + ), + migrations.AlterField( + model_name="sithfile", + name="owner", + field=models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name="owned_files", + to=settings.AUTH_USER_MODEL, + verbose_name="owner", + ), + ), + migrations.RenameField( + model_name="sithfile", old_name="date", new_name="created_at" + ), + migrations.AlterField( + model_name="sithfile", + name="created_at", + field=models.DateTimeField(auto_now_add=True, verbose_name="created at"), + ), + migrations.AddField( + model_name="sithfile", + name="updated_at", + field=models.DateTimeField(auto_now=True, verbose_name="updated at"), + ), + migrations.RunPython(set_updated_at, reverse_code=migrations.RunPython.noop), + ] diff --git a/core/models.py b/core/models.py index ffbdebfc..6a31a567 100644 --- a/core/models.py +++ b/core/models.py @@ -853,7 +853,7 @@ class SithFile(models.Model): User, related_name="owned_files", verbose_name=_("owner"), - on_delete=models.CASCADE, + on_delete=models.PROTECT, ) edit_groups = models.ManyToManyField( Group, related_name="editable_files", verbose_name=_("edit group"), blank=True @@ -864,7 +864,8 @@ class SithFile(models.Model): is_folder = models.BooleanField(_("is folder"), default=True, db_index=True) mime_type = models.CharField(_("mime type"), max_length=30) size = models.IntegerField(_("size"), default=0) - date = models.DateTimeField(_("date"), default=timezone.now) + created_at = models.DateTimeField(_("created at"), auto_now_add=True) + updated_at = models.DateTimeField(_("updated at"), auto_now=True) is_moderated = models.BooleanField(_("is moderated"), default=False) moderator = models.ForeignKey( User, @@ -872,7 +873,7 @@ class SithFile(models.Model): verbose_name=_("owner"), null=True, blank=True, - on_delete=models.CASCADE, + on_delete=models.SET_NULL, ) asked_for_removal = models.BooleanField(_("asked for removal"), default=False) is_in_sas = models.BooleanField( diff --git a/sas/admin.py b/sas/admin.py index ac980341..babae3a6 100644 --- a/sas/admin.py +++ b/sas/admin.py @@ -20,7 +20,7 @@ from sas.models import Album, PeoplePictureRelation, Picture, PictureModerationR @admin.register(Picture) class PictureAdmin(admin.ModelAdmin): - list_display = ("name", "parent", "date", "size", "is_moderated") + list_display = ("name", "parent", "created_at", "size", "is_moderated") search_fields = ("name",) autocomplete_fields = ("owner", "parent", "edit_groups", "view_groups", "moderator") @@ -33,7 +33,7 @@ class PeoplePictureRelationAdmin(admin.ModelAdmin): @admin.register(Album) class AlbumAdmin(admin.ModelAdmin): - list_display = ("name", "parent", "date", "owner", "is_moderated") + list_display = ("name", "parent", "created_at", "owner", "is_moderated") search_fields = ("name",) autocomplete_fields = ("owner", "parent", "edit_groups", "view_groups") diff --git a/sas/api.py b/sas/api.py index 62fe1e5d..6a58025d 100644 --- a/sas/api.py +++ b/sas/api.py @@ -96,7 +96,7 @@ class PicturesController(ControllerBase): return ( filters.filter(Picture.objects.viewable_by(user)) .distinct() - .order_by("-parent__date", "date") + .order_by("-parent__created_at", "created_at") .select_related("owner", "parent") ) diff --git a/sas/schemas.py b/sas/schemas.py index 93c33192..a397d91e 100644 --- a/sas/schemas.py +++ b/sas/schemas.py @@ -59,8 +59,8 @@ class AlbumAutocompleteSchema(ModelSchema): class PictureFilterSchema(FilterSchema): - before_date: Annotated[datetime | None, FilterLookup("date__lte")] = None - after_date: Annotated[datetime | None, FilterLookup("date__gte")] = None + before_date: Annotated[datetime | None, FilterLookup("created_at__lte")] = None + after_date: Annotated[datetime | None, FilterLookup("created_at__gte")] = None users_identified: Annotated[ set[int] | None, FilterLookup("people__user_id__in") ] = None @@ -70,7 +70,15 @@ class PictureFilterSchema(FilterSchema): class PictureSchema(ModelSchema): class Meta: model = Picture - fields = ["id", "name", "date", "size", "is_moderated", "asked_for_removal"] + fields = [ + "id", + "name", + "created_at", + "updated_at", + "size", + "is_moderated", + "asked_for_removal", + ] owner: UserProfileSchema sas_url: str