This commit is contained in:
KUB0570 2025-03-09 11:20:03 +01:00
parent 10beabd148
commit 04445a05a6
9 changed files with 64 additions and 9 deletions

3
TODO
View file

@ -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)

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

View file

@ -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)

View file

@ -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')),
],
),
]

View file

@ -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()

View file

@ -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):

View file

@ -12,8 +12,8 @@
<v-row>
<v-col>
<v-img
:lazy-src="article.image"
:src="article.image"
:lazy-src="article.image.image"
:src="article.image.image"
aspect-ratio="1"
cover
class="article__image"
@ -50,10 +50,15 @@ import './assets/css/main.css'
import { useAPI } from "~/composables/useAPI";
interface ArticleImage {
image: string;
}
interface Article {
id: number;
title: string;
image: string;
images: ArticleImage[];
date: string;
content: string;
author: string;