Rework webapp models and add translation framework

This commit is contained in:
Ilkka Oksanen
2017-06-07 18:38:04 +03:00
parent b37d5f2f55
commit bd0522f79a
15 changed files with 359 additions and 28 deletions
+1
View File
@@ -23,3 +23,4 @@ django-bootstrap3==8.2.3
django-tables2==1.6.1
pep8==1.7.0
dealer==2.0.5
django-modeltranslation==0.12.1
+2 -1
View File
@@ -35,6 +35,7 @@ ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
'modeltranslation', # has to be before admin for translation admin stuff to work
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
@@ -175,8 +176,8 @@ LOGPATH = "logs/debug.log"
# https://docs.djangoproject.com/en/1.9/topics/i18n/
LANGUAGES = (
('en', _('English')),
('fi', _('Finnish')),
('en', _('English')),
)
LANGUAGE_CODE = 'fi'
+1
View File
@@ -0,0 +1 @@
+6 -1
View File
@@ -1,3 +1,8 @@
from django.contrib import admin
from webapp.models import Feed, Tag, BaseFeed, Event
from modeltranslation.admin import TranslationAdmin
# Register your models here.
admin.site.register(Feed, TranslationAdmin)
admin.site.register(Tag, TranslationAdmin)
admin.site.register(Event, TranslationAdmin)
+3
View File
@@ -3,3 +3,6 @@ from django.apps import AppConfig
class WebappConfig(AppConfig):
name = 'webapp'
def ready(self):
import webapp.translations
@@ -0,0 +1,71 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2017-06-01 16:19
from __future__ import unicode_literals
from django.db import migrations, models
import django.utils.timezone
import webapp.utils
class Migration(migrations.Migration):
dependencies = [
('webapp', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Feed',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('publish_time', models.DateTimeField(default=django.utils.timezone.now)),
('autohide', models.BooleanField(default=False)),
('autohide_time', models.DateTimeField(default=webapp.utils.month_from_now)),
('topic', models.CharField(max_length=255)),
('description', models.CharField(max_length=255)),
('content', models.TextField()),
],
),
migrations.RemoveField(
model_name='info',
name='tags',
),
migrations.RemoveField(
model_name='infotr',
name='translation_for',
),
migrations.RemoveField(
model_name='tagtr',
name='translation_for',
),
migrations.RemoveField(
model_name='tag',
name='dummyname',
),
migrations.AddField(
model_name='tag',
name='name',
field=models.CharField(default='', max_length=127),
preserve_default=False,
),
migrations.AddField(
model_name='tag',
name='slug',
field=models.SlugField(default=''),
preserve_default=False,
),
migrations.DeleteModel(
name='Info',
),
migrations.DeleteModel(
name='InfoTr',
),
migrations.DeleteModel(
name='TagTr',
),
migrations.AddField(
model_name='feed',
name='tags',
field=models.ManyToManyField(related_name='news', to='webapp.Tag'),
),
]
@@ -0,0 +1,45 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2017-06-07 13:43
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('webapp', '0002_auto_20170601_1919'),
]
operations = [
migrations.AddField(
model_name='feed',
name='content_en',
field=models.TextField(null=True),
),
migrations.AddField(
model_name='feed',
name='content_fi',
field=models.TextField(null=True),
),
migrations.AddField(
model_name='feed',
name='description_en',
field=models.CharField(max_length=255, null=True),
),
migrations.AddField(
model_name='feed',
name='description_fi',
field=models.CharField(max_length=255, null=True),
),
migrations.AddField(
model_name='feed',
name='topic_en',
field=models.CharField(max_length=255, null=True),
),
migrations.AddField(
model_name='feed',
name='topic_fi',
field=models.CharField(max_length=255, null=True),
),
]
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2017-06-07 14:12
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('webapp', '0003_auto_20170607_1643'),
]
operations = [
migrations.AlterField(
model_name='feed',
name='tags',
field=models.ManyToManyField(blank=True, related_name='news', to='webapp.Tag'),
),
]
@@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2017-06-07 14:17
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('webapp', '0004_auto_20170607_1712'),
]
operations = [
migrations.AddField(
model_name='tag',
name='name_en',
field=models.CharField(max_length=127, null=True),
),
migrations.AddField(
model_name='tag',
name='name_fi',
field=models.CharField(max_length=127, null=True),
),
]
@@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2017-06-01 16:19
from __future__ import unicode_literals
from django.db import migrations, models
import django.utils.timezone
import webapp.utils
class Migration(migrations.Migration):
dependencies = [
('webapp', '0005_auto_20170607_1717'),
]
operations = [
migrations.DeleteModel(
name='Tag',
),
migrations.DeleteModel(
name='Feed',
),
]
@@ -0,0 +1,61 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2017-06-07 15:15
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
import webapp.utils
class Migration(migrations.Migration):
initial = True
dependencies = [
('webapp', '0006_delete_deprecated_models'),
]
operations = [
migrations.CreateModel(
name='BaseFeed',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('visible', models.BooleanField(default=True)),
('title', models.CharField(max_length=255)),
('description', models.CharField(max_length=255)),
('content', models.TextField()),
],
),
migrations.CreateModel(
name='Tag',
fields=[
('slug', models.SlugField(primary_key=True, serialize=False)),
('name', models.CharField(max_length=127)),
('icon', models.ImageField(upload_to='')),
],
),
migrations.CreateModel(
name='Event',
fields=[
('basefeed_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='webapp.BaseFeed')),
('start_time', models.DateTimeField(default=django.utils.timezone.now)),
('end_time', models.DateTimeField(default=django.utils.timezone.now)),
],
bases=('webapp.basefeed',),
),
migrations.CreateModel(
name='Feed',
fields=[
('basefeed_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='webapp.BaseFeed')),
('publish_time', models.DateTimeField(default=django.utils.timezone.now)),
('autohide', models.DateTimeField(default=webapp.utils.month_from_now)),
],
bases=('webapp.basefeed',),
),
migrations.AddField(
model_name='basefeed',
name='tags',
field=models.ManyToManyField(blank=True, related_name='feeds', to='webapp.Tag'),
),
]
@@ -0,0 +1,55 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2017-06-07 15:28
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('webapp', '0007_auto_20170607_1815'),
]
operations = [
migrations.AddField(
model_name='basefeed',
name='content_en',
field=models.TextField(null=True),
),
migrations.AddField(
model_name='basefeed',
name='content_fi',
field=models.TextField(null=True),
),
migrations.AddField(
model_name='basefeed',
name='description_en',
field=models.CharField(max_length=255, null=True),
),
migrations.AddField(
model_name='basefeed',
name='description_fi',
field=models.CharField(max_length=255, null=True),
),
migrations.AddField(
model_name='basefeed',
name='title_en',
field=models.CharField(max_length=255, null=True),
),
migrations.AddField(
model_name='basefeed',
name='title_fi',
field=models.CharField(max_length=255, null=True),
),
migrations.AddField(
model_name='tag',
name='name_en',
field=models.CharField(max_length=127, null=True),
),
migrations.AddField(
model_name='tag',
name='name_fi',
field=models.CharField(max_length=127, null=True),
),
]
+21 -26
View File
@@ -1,37 +1,32 @@
from django.db import models
from django.utils import timezone
from datetime import timedelta
from django.contrib.auth.models import User
from webapp.utils import month_from_now
class Tag(models.Model):
# ALWAYS USE TRANSLATED NAME!!!
dummyname = models.CharField(max_length=127)
class TagTr(models.Model):
'''
Model containing translations for tags
'''
lang = models.CharField(max_length=2, default='fi')
slug = models.SlugField(primary_key=True)
name = models.CharField(max_length=127)
translation_for = models.ForeignKey('Tag', related_name='translations')
icon = models.ImageField()
class Info(models.Model):
class BaseFeed(models.Model):
'''
model containing something showing on some info feed
'''
publish_time = models.DateTimeField(default=timezone.now)
# published_by = models.Foreignkey(User) #<-- TODO create usermodel
tags = models.ManyToManyField(Tag, related_name="news")
class InfoTr(models.Model):
'''
Model containing translations for news
'''
lang = models.CharField(max_length=2, default='fi')
topic = models.CharField(max_length=255)
tags = models.ManyToManyField(Tag, related_name="feeds", blank=True)
visible = models.BooleanField(default=True)
title = models.CharField(max_length=255)
description = models.CharField(max_length=255)
content = models.TextField()
translation_for = models.ForeignKey('Info', related_name='translations')
class Feed(BaseFeed):
publish_time = models.DateTimeField(default=timezone.now)
autohide = models.DateTimeField(default=month_from_now)
class Event(BaseFeed):
start_time = models.DateTimeField(default=timezone.now)
end_time = models.DateTimeField(default=timezone.now)
+19
View File
@@ -0,0 +1,19 @@
from modeltranslation.translator import register, TranslationOptions
from webapp.models import BaseFeed, Feed, Tag, Event
@register(BaseFeed)
class BaseFeedTranslationOptions(TranslationOptions):
fields = ('title', 'description', 'content')
@register(Feed)
class FeedTranslationOptions(TranslationOptions):
fields = ()
@register(Event)
class EventTranslationOptions(TranslationOptions):
fields = ()
@register(Tag)
class TagTranslationOptions(TranslationOptions):
fields = ('name',)
+6
View File
@@ -0,0 +1,6 @@
from django.utils import timezone
from datetime import timedelta
def month_from_now():
return timezone.now() + timedelta(days=30)