Rework webapp models and add translation framework
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
|
||||
+6
-1
@@ -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,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
@@ -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)
|
||||
|
||||
@@ -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',)
|
||||
@@ -0,0 +1,6 @@
|
||||
from django.utils import timezone
|
||||
from datetime import timedelta
|
||||
|
||||
|
||||
def month_from_now():
|
||||
return timezone.now() + timedelta(days=30)
|
||||
Reference in New Issue
Block a user