generated from JustScreaMy/ProjectTemplate
progress
This commit is contained in:
parent
10beabd148
commit
04445a05a6
9 changed files with 64 additions and 9 deletions
3
TODO
3
TODO
|
@ -1,11 +1,8 @@
|
||||||
Nastylovat:
|
Nastylovat:
|
||||||
- footer
|
|
||||||
- lazyload načítat o něco dříve (neli zrušit alespoň mimo galerii)
|
- lazyload načítat o něco dříve (neli zrušit alespoň mimo galerii)
|
||||||
|
|
||||||
Naprogramovat:
|
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 v galerii zvětsovač na obrázky
|
||||||
- přidat volání na api
|
|
||||||
|
|
||||||
Naplánovat:
|
Naplánovat:
|
||||||
- kurzy + cena: vyskakovací okno na rezervaci s jménem lekce? jak to vyřešit s kalendářem? (stránka /rezervace)
|
- 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 |
|
@ -19,9 +19,15 @@ class ContactAdmin(admin.ModelAdmin):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
class ArticleImageInline(admin.TabularInline): # Or admin.StackedInline for a different layout
|
||||||
|
model = models.ArticleImage
|
||||||
|
extra = 1
|
||||||
|
|
||||||
|
|
||||||
@admin.register(models.Article)
|
@admin.register(models.Article)
|
||||||
class ArticleAdmin(admin.ModelAdmin):
|
class ArticleAdmin(admin.ModelAdmin):
|
||||||
list_display = ['title', 'date', 'author']
|
list_display = ['title', 'date', 'author']
|
||||||
|
inlines = [ArticleImageInline]
|
||||||
|
|
||||||
|
|
||||||
@admin.register(models.Event)
|
@admin.register(models.Event)
|
||||||
|
|
|
@ -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')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
]
|
|
@ -1,6 +1,6 @@
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
# Create your models here.
|
|
||||||
class Contact(models.Model):
|
class Contact(models.Model):
|
||||||
name = models.CharField(max_length=100)
|
name = models.CharField(max_length=100)
|
||||||
email = models.EmailField()
|
email = models.EmailField()
|
||||||
|
@ -14,7 +14,7 @@ class Contact(models.Model):
|
||||||
class Article(models.Model):
|
class Article(models.Model):
|
||||||
title = models.CharField(max_length=100)
|
title = models.CharField(max_length=100)
|
||||||
content = models.TextField()
|
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)
|
date = models.DateField(auto_now_add=True)
|
||||||
author = models.CharField(max_length=100)
|
author = models.CharField(max_length=100)
|
||||||
|
|
||||||
|
@ -24,6 +24,14 @@ class Article(models.Model):
|
||||||
return self.title
|
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):
|
class Event(models.Model):
|
||||||
title = models.CharField(max_length=100)
|
title = models.CharField(max_length=100)
|
||||||
start_date = models.DateTimeField()
|
start_date = models.DateTimeField()
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from django.utils.timezone import localtime
|
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):
|
class ContactSerializer(serializers.ModelSerializer):
|
||||||
|
@ -10,12 +10,19 @@ class ContactSerializer(serializers.ModelSerializer):
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
|
class ArticleImageSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = ArticleImage
|
||||||
|
fields = ['image']
|
||||||
|
|
||||||
|
|
||||||
class ArticleListSerializer(serializers.ModelSerializer):
|
class ArticleListSerializer(serializers.ModelSerializer):
|
||||||
date = serializers.SerializerMethodField()
|
date = serializers.SerializerMethodField()
|
||||||
|
images = ArticleImageSerializer(many=True, read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Article
|
model = Article
|
||||||
fields = ["id", "author", "content", "date", "image", "title"]
|
fields = ["id", "author", "content", "date", "image", "title", "images"]
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_date(obj):
|
def get_date(obj):
|
||||||
|
|
|
@ -12,8 +12,8 @@
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col>
|
<v-col>
|
||||||
<v-img
|
<v-img
|
||||||
:lazy-src="article.image"
|
:lazy-src="article.image.image"
|
||||||
:src="article.image"
|
:src="article.image.image"
|
||||||
aspect-ratio="1"
|
aspect-ratio="1"
|
||||||
cover
|
cover
|
||||||
class="article__image"
|
class="article__image"
|
||||||
|
@ -50,10 +50,15 @@ import './assets/css/main.css'
|
||||||
|
|
||||||
import { useAPI } from "~/composables/useAPI";
|
import { useAPI } from "~/composables/useAPI";
|
||||||
|
|
||||||
|
interface ArticleImage {
|
||||||
|
image: string;
|
||||||
|
}
|
||||||
|
|
||||||
interface Article {
|
interface Article {
|
||||||
id: number;
|
id: number;
|
||||||
title: string;
|
title: string;
|
||||||
image: string;
|
image: string;
|
||||||
|
images: ArticleImage[];
|
||||||
date: string;
|
date: string;
|
||||||
content: string;
|
content: string;
|
||||||
author: string;
|
author: string;
|
||||||
|
|
Loading…
Reference in a new issue