diff --git a/TODO b/TODO index cfa3b95..1e58ac0 100644 --- a/TODO +++ b/TODO @@ -1,11 +1,8 @@ Nastylovat: -- footer - lazyload načítat o něco dříve (neli zrušit alespoň mimo galerii) Naprogramovat: -- tlačítko "načíst další aktuality" v komponentě News (možná přidat i novou stránku /aktuality - přidat v galerii zvětsovač na obrázky -- přidat volání na api Naplánovat: - kurzy + cena: vyskakovací okno na rezervaci s jménem lekce? jak to vyřešit s kalendářem? (stránka /rezervace) diff --git a/services/backend/media/images/2025/346163504_3519467614938940_113543636749504288_n.jpg b/services/backend/media/images/2025/346163504_3519467614938940_113543636749504288_n.jpg new file mode 100644 index 0000000..23b156c Binary files /dev/null and b/services/backend/media/images/2025/346163504_3519467614938940_113543636749504288_n.jpg differ diff --git a/services/backend/media/images/2025/438293706_3289235354716228_4075501884424465357_n.jpg b/services/backend/media/images/2025/438293706_3289235354716228_4075501884424465357_n.jpg new file mode 100644 index 0000000..faea436 Binary files /dev/null and b/services/backend/media/images/2025/438293706_3289235354716228_4075501884424465357_n.jpg differ diff --git a/services/backend/media/images/2025/449343558_2204870119913217_4680032142215421458_n.jpg b/services/backend/media/images/2025/449343558_2204870119913217_4680032142215421458_n.jpg new file mode 100644 index 0000000..1880493 Binary files /dev/null and b/services/backend/media/images/2025/449343558_2204870119913217_4680032142215421458_n.jpg differ diff --git a/services/backend/tko/admin.py b/services/backend/tko/admin.py index e2f1465..7906e1b 100644 --- a/services/backend/tko/admin.py +++ b/services/backend/tko/admin.py @@ -19,9 +19,15 @@ class ContactAdmin(admin.ModelAdmin): return False +class ArticleImageInline(admin.TabularInline): # Or admin.StackedInline for a different layout + model = models.ArticleImage + extra = 1 + + @admin.register(models.Article) class ArticleAdmin(admin.ModelAdmin): list_display = ['title', 'date', 'author'] + inlines = [ArticleImageInline] @admin.register(models.Event) diff --git a/services/backend/tko/migrations/0005_remove_article_image_alter_article_date_articleimage.py b/services/backend/tko/migrations/0005_remove_article_image_alter_article_date_articleimage.py new file mode 100644 index 0000000..5890eaa --- /dev/null +++ b/services/backend/tko/migrations/0005_remove_article_image_alter_article_date_articleimage.py @@ -0,0 +1,32 @@ +# Generated by Django 5.1.5 on 2025-03-05 15:36 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('tko', '0004_alter_article_image'), + ] + + operations = [ + migrations.RemoveField( + model_name='article', + name='image', + ), + migrations.AlterField( + model_name='article', + name='date', + field=models.DateField(auto_now_add=True), + ), + migrations.CreateModel( + name='ArticleImage', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('image', models.FileField(default='default.png', upload_to='images/%Y')), + ('is_main', models.BooleanField(default=False)), + ('article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='images', to='tko.article')), + ], + ), + ] diff --git a/services/backend/tko/models.py b/services/backend/tko/models.py index f2a4083..0ddd66a 100644 --- a/services/backend/tko/models.py +++ b/services/backend/tko/models.py @@ -1,6 +1,6 @@ from django.db import models -# Create your models here. + class Contact(models.Model): name = models.CharField(max_length=100) email = models.EmailField() @@ -14,7 +14,7 @@ class Contact(models.Model): class Article(models.Model): title = models.CharField(max_length=100) content = models.TextField() - image = models.FileField(default="default.png", blank=True) + image = models.FileField(upload_to="images/%Y", default="default.png", blank=True) date = models.DateField(auto_now_add=True) author = models.CharField(max_length=100) @@ -24,6 +24,14 @@ class Article(models.Model): return self.title +class ArticleImage(models.Model): + article = models.ForeignKey(Article, on_delete=models.CASCADE, related_name='images') + image = models.FileField(upload_to="images/%Y") + + def __str__(self): + return f"Image for {self.article.title}, {self.article.date}" + + class Event(models.Model): title = models.CharField(max_length=100) start_date = models.DateTimeField() diff --git a/services/backend/tko/serializers.py b/services/backend/tko/serializers.py index e662dd1..79b75a3 100644 --- a/services/backend/tko/serializers.py +++ b/services/backend/tko/serializers.py @@ -1,7 +1,7 @@ from rest_framework import serializers from django.utils.timezone import localtime -from tko.models import Contact, Article, Event +from tko.models import Contact, Article, Event, ArticleImage class ContactSerializer(serializers.ModelSerializer): @@ -10,12 +10,19 @@ class ContactSerializer(serializers.ModelSerializer): fields = '__all__' +class ArticleImageSerializer(serializers.ModelSerializer): + class Meta: + model = ArticleImage + fields = ['image'] + + class ArticleListSerializer(serializers.ModelSerializer): date = serializers.SerializerMethodField() + images = ArticleImageSerializer(many=True, read_only=True) class Meta: model = Article - fields = ["id", "author", "content", "date", "image", "title"] + fields = ["id", "author", "content", "date", "image", "title", "images"] @staticmethod def get_date(obj): diff --git a/services/frontend/components/News.vue b/services/frontend/components/News.vue index 74082ba..0356e0c 100644 --- a/services/frontend/components/News.vue +++ b/services/frontend/components/News.vue @@ -12,8 +12,8 @@