diff --git a/core/models.py b/core/models.py index 3290927c..5ec82728 100644 --- a/core/models.py +++ b/core/models.py @@ -24,7 +24,6 @@ class Like(Model): ) object_id = models.PositiveIntegerField() content_object = GenericForeignKey("content_type", "object_id") - # is liked? class Meta: unique_together = ("user", "content_type", "object_id") diff --git a/files/admin.py b/files/admin.py index ffd1e499..2e7bc770 100644 --- a/files/admin.py +++ b/files/admin.py @@ -6,8 +6,32 @@ @admin.register(UserFile) class UserFileAdmin(admin.ModelAdmin): list_display = ( + "short_link", + "filename", + "user", + "datetime_uploaded", + ) + list_display_links = ( + "short_link", + "filename", + "user", + ) + search_fields = ( "link", + "user__first_name", + "user__last_name", + ) + list_filter = ( "user", "datetime_uploaded", ) - list_display_links = ("link",) + + date_hierarchy = "datetime_uploaded" + + @admin.display(empty_value="Empty filename") + def filename(self, obj): + return obj.name + + @admin.display(empty_value="Empty link") + def short_link(self, obj): + return obj.link[15:40] + "..." + obj.link[-20:] diff --git a/files/models.py b/files/models.py index 42b35a08..5c419695 100644 --- a/files/models.py +++ b/files/models.py @@ -9,13 +9,16 @@ class UserFile(models.Model): UserFile model Attributes: - user: User who uploaded the file link: Link to the file on the CDN + user: User who uploaded the file datetime_uploaded: Datetime when the file was uploaded + name: Name of the file + extension: Extension of the file + size: Size of the file in bytes """ - user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True) link = models.URLField(primary_key=True, null=False) + user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True) datetime_uploaded = models.DateTimeField(auto_now_add=True) name = models.TextField(blank=False, default="file") extension = models.TextField(blank=True, default="") diff --git a/projects/admin.py b/projects/admin.py index 4ba3a037..2188401e 100644 --- a/projects/admin.py +++ b/projects/admin.py @@ -28,6 +28,8 @@ class ProjectNewsAdmin(admin.ModelAdmin): "project", "datetime_created", ) + # todo: set up admin panel for files + filter_horizontal = ("files",) @admin.register(Achievement) diff --git a/projects/migrations/0015_projectnews_files.py b/projects/migrations/0015_projectnews_files.py new file mode 100644 index 00000000..cb52a307 --- /dev/null +++ b/projects/migrations/0015_projectnews_files.py @@ -0,0 +1,21 @@ +# Generated by Django 4.2 on 2023-06-14 08:13 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("files", "0003_userfile_extension_userfile_name_userfile_size"), + ("projects", "0014_alter_projectnews_options_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="projectnews", + name="files", + field=models.ManyToManyField( + related_name="projects_news", to="files.userfile" + ), + ), + ] diff --git a/projects/migrations/0016_alter_projectnews_files.py b/projects/migrations/0016_alter_projectnews_files.py new file mode 100644 index 00000000..28071d56 --- /dev/null +++ b/projects/migrations/0016_alter_projectnews_files.py @@ -0,0 +1,21 @@ +# Generated by Django 4.2 on 2023-06-14 08:36 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("files", "0003_userfile_extension_userfile_name_userfile_size"), + ("projects", "0015_projectnews_files"), + ] + + operations = [ + migrations.AlterField( + model_name="projectnews", + name="files", + field=models.ManyToManyField( + blank=True, related_name="projects_news", to="files.userfile" + ), + ), + ] diff --git a/projects/models.py b/projects/models.py index 6792d632..c32ad85b 100644 --- a/projects/models.py +++ b/projects/models.py @@ -6,6 +6,7 @@ from django.db.models import UniqueConstraint from core.models import Like, View +from files.models import UserFile from industries.models import Industry from projects.constants import VERBOSE_STEPS from projects.managers import AchievementManager, ProjectManager @@ -207,6 +208,9 @@ class ProjectNews(models.Model): null=False, blank=False, ) + # todo: remove files unused files + files = models.ManyToManyField(UserFile, related_name="projects_news", blank=True) + views = GenericRelation( View, related_query_name="project_views", @@ -215,7 +219,6 @@ class ProjectNews(models.Model): Like, related_query_name="project_news", ) - # todo: files datetime_created = models.DateTimeField( verbose_name="Дата создания", diff --git a/projects/serializers.py b/projects/serializers.py index f6cd87ea..7e144c9a 100644 --- a/projects/serializers.py +++ b/projects/serializers.py @@ -238,6 +238,7 @@ class Meta: "datetime_created", "views_count", "likes_count", + "files", ] @@ -270,4 +271,5 @@ class Meta: "datetime_updated", "views_count", "likes_count", + "files", ]