API 1.0.16 - Alternatives, Exercise Type Parents, Translations

This commit is contained in:
Bossanyi Tibor 2020-12-03 14:59:54 +01:00
parent 7b35f107ac
commit ae782f7703
8 changed files with 208 additions and 9 deletions

View File

@ -1,8 +1,9 @@
from django.contrib import admin from django.contrib import admin
from django.utils.html import format_html from django.utils.html import format_html
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from .models import ExerciseType, Product, Purchase, Property, PropertyTranslation from .models import ExerciseType, ExerciseTypeAlternative, ExerciseTypeParents
from .models import ExerciseDevice, ExerciseDeviceTranslation, ExerciseTypeDevice from .models import Product, Purchase, Property, PropertyTranslation
from .models import ExerciseDevice, ExerciseDeviceTranslation, ExerciseTypeDevice, ExerciseDeviceAlternative
from .models import ExerciseTypeImage from .models import ExerciseTypeImage
from .models import ExerciseTypeTranslation from .models import ExerciseTypeTranslation
from .models import ExerciseTreeTranslation from .models import ExerciseTreeTranslation
@ -60,8 +61,9 @@ class ExerciseTypeAdmin(admin.ModelAdmin):
inlines = [ inlines = [
ImageInline, ImageInline,
TranslationInline, TranslationInline,
ExerciseTypeDeviceInline ExerciseTypeDeviceInline,
] ]
exclude = ('exercise_tree',)
class TranslationTreeInline(admin.TabularInline): class TranslationTreeInline(admin.TabularInline):
@ -128,8 +130,8 @@ class ExercisePlanAdmin(admin.ModelAdmin):
class ExercisePlanDetailAdmin(admin.ModelAdmin): class ExercisePlanDetailAdmin(admin.ModelAdmin):
list_display = ( 'get_plan', 'get_exercise_type', 'serie', 'repeat', 'weight_equation',) list_display = ( 'get_plan', 'get_exercise_type', 'serie', 'repeats', 'weight_equation',)
list_editable = ('serie', 'repeat', 'weight_equation',) list_editable = ('serie', 'repeats', 'weight_equation',)
#list_editable_link('',) #list_editable_link('',)
def get_plan(self, obj): def get_plan(self, obj):
@ -176,6 +178,10 @@ class TranslationExerciseDeviceInline(admin.TabularInline):
fields = ('language_code', 'name') fields = ('language_code', 'name')
extra = 0 extra = 0
def __init__(self, parent_model, admin_site):
super().__init__(parent_model, admin_site)
self.short_description = _("Nyelvi kód")
class ExerciseDeviceAdmin(admin.ModelAdmin): class ExerciseDeviceAdmin(admin.ModelAdmin):
list_display = ('exercise_device_id', 'name') list_display = ('exercise_device_id', 'name')
@ -191,10 +197,22 @@ class ExerciseDeviceAdmin(admin.ModelAdmin):
get_image_preview.short_description = _("Image Preview") get_image_preview.short_description = _("Image Preview")
inlines = [ inlines = [
TranslationExerciseDeviceInline TranslationExerciseDeviceInline,
] ]
class ExerciseDeviceAlternativeAdmin(admin.ModelAdmin):
list_display = ('exercise_device_alternative_id', 'exercise_device_parent')
class ExerciseTypeAlternativeAdmin(admin.ModelAdmin):
list_display = ('exercise_type_alternative_id',)
class ExerciseTypeParentsAdmin(admin.ModelAdmin):
list_display = ('exercise_type_parents_id', 'exercise_type')
admin.site.register(ExerciseType, ExerciseTypeAdmin) admin.site.register(ExerciseType, ExerciseTypeAdmin)
admin.site.register(ExerciseTree, ExerciseTreeAdmin) admin.site.register(ExerciseTree, ExerciseTreeAdmin)
admin.site.register(ExercisePlan, ExercisePlanAdmin) admin.site.register(ExercisePlan, ExercisePlanAdmin)
@ -203,5 +221,8 @@ admin.site.register(Product, ProductAdmin)
admin.site.register(Purchase, PurchaseAdmin) admin.site.register(Purchase, PurchaseAdmin)
admin.site.register(Property, PropertyAdmin) admin.site.register(Property, PropertyAdmin)
admin.site.register(ExerciseDevice, ExerciseDeviceAdmin) admin.site.register(ExerciseDevice, ExerciseDeviceAdmin)
admin.site.register(ExerciseDeviceAlternative, ExerciseDeviceAlternativeAdmin)
admin.site.register(ExerciseTypeAlternative, ExerciseTypeAlternativeAdmin)
admin.site.register(ExerciseTypeParents, ExerciseTypeParentsAdmin)
admin.autodiscover() admin.autodiscover()

View File

@ -0,0 +1,132 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-12-03 14:42+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: .\aitrainer_backoffice\admin.py:34 .\aitrainer_backoffice\admin.py:88
#: .\aitrainer_backoffice\admin.py:194
msgid "Image Preview"
msgstr "Kép előnézet"
#: .\aitrainer_backoffice\models.py:21 .\aitrainer_backoffice\models.py:252
msgid "Exercise Device"
msgstr "Edzés eszköz"
#: .\aitrainer_backoffice\models.py:22 .\aitrainer_backoffice\models.py:253
msgid "Exercise Devices"
msgstr "Edzés eszközök"
#: .\aitrainer_backoffice\models.py:42
msgid "Exercise Tree"
msgstr "Gyakorlat menü"
#: .\aitrainer_backoffice\models.py:43
msgid "Exercise Tree Items"
msgstr "Gyakorlat menü elem"
#: .\aitrainer_backoffice\models.py:76
msgid "Exercise"
msgstr "Gyakorlat"
#: .\aitrainer_backoffice\models.py:77
msgid "Exercises"
msgstr "Gyakorlatok"
#: .\aitrainer_backoffice\models.py:97
msgid "Image"
msgstr "Kép"
#: .\aitrainer_backoffice\models.py:98
msgid "Images"
msgstr "Képek"
#: .\aitrainer_backoffice\models.py:113 .\aitrainer_backoffice\models.py:128
#: .\aitrainer_backoffice\models.py:159 .\aitrainer_backoffice\models.py:238
#: .\aitrainer_backoffice\models.py:264
msgid "Translation"
msgstr "Fordítás"
#: .\aitrainer_backoffice\models.py:114 .\aitrainer_backoffice\models.py:129
#: .\aitrainer_backoffice\models.py:160 .\aitrainer_backoffice\models.py:239
#: .\aitrainer_backoffice\models.py:265
msgid "Translations"
msgstr "Fordítások"
#: .\aitrainer_backoffice\models.py:143
msgid "Exercise Plan"
msgstr "Edzésterv"
#: .\aitrainer_backoffice\models.py:144
msgid "Exercise Plans"
msgstr "Edzéstervek"
#: .\aitrainer_backoffice\models.py:176
msgid "Exercise Plan Detail"
msgstr "Edzésterv gyakorlat"
#: .\aitrainer_backoffice\models.py:177
msgid "Exercise Plan Details"
msgstr "Edzésterv gyakorlatok"
#: .\aitrainer_backoffice\models.py:195
msgid "Product"
msgstr "Termék"
#: .\aitrainer_backoffice\models.py:196
msgid "Products"
msgstr "Termékek"
#: .\aitrainer_backoffice\models.py:212
msgid "Purchase"
msgstr "Vásárlás"
#: .\aitrainer_backoffice\models.py:213
msgid "Purchases"
msgstr "Vásárlások"
#: .\aitrainer_backoffice\models.py:223
msgid "Customer Property"
msgstr "Ügyfél tulajdonság"
#: .\aitrainer_backoffice\models.py:224
msgid "Customer Properties"
msgstr "Ügyfél tulajdonságok"
#: .\aitrainer_backoffice\models.py:280
msgid "Device Alternative"
msgstr "Eszköz alternatíva"
#: .\aitrainer_backoffice\models.py:281
msgid "Device Alternatives"
msgstr "Eszköz alternatívák"
#: .\aitrainer_backoffice\models.py:292
msgid "Exercise Alternative"
msgstr "Gyakorlat alternatíva"
#: .\aitrainer_backoffice\models.py:293
msgid "Exercise Alternatives"
msgstr "Gyakorlat alternatívák"
#: .\aitrainer_backoffice\models.py:304
msgid "Exercise Parent"
msgstr "Gyakorlat szülő menüpont"
#: .\aitrainer_backoffice\models.py:305
msgid "Exercise Parents"
msgstr "Gyakorlat szülő menüpontok"

View File

@ -68,6 +68,8 @@ class ExerciseType(models.Model):
null=True) null=True)
active = models.BooleanField(default=0, blank=True, null=True) active = models.BooleanField(default=0, blank=True, null=True)
base = models.BooleanField(default=0, blank=True, null=True) base = models.BooleanField(default=0, blank=True, null=True)
parents = models.ManyToManyField(ExerciseTree, through='ExerciseTypeParents', related_name='ExerciseTree')
class Meta: class Meta:
db_table = 'exercise_type' db_table = 'exercise_type'
@ -166,7 +168,7 @@ class ExercisePlanDetail(models.Model):
exercise_plan = models.ForeignKey(ExercisePlan, on_delete=models.CASCADE) exercise_plan = models.ForeignKey(ExercisePlan, on_delete=models.CASCADE)
exercise_type = models.ForeignKey(ExerciseType, on_delete=models.CASCADE) exercise_type = models.ForeignKey(ExerciseType, on_delete=models.CASCADE)
serie = models.IntegerField() serie = models.IntegerField()
repeat = models.IntegerField() repeats = models.IntegerField()
weight_equation = models.CharField(max_length=100) weight_equation = models.CharField(max_length=100)
class Meta: class Meta:
@ -264,3 +266,41 @@ class ExerciseDeviceTranslation(models.Model):
def __str__(self): def __str__(self):
return self.name return self.name
class ExerciseDeviceAlternative(models.Model):
exercise_device_alternative_id = models.AutoField(primary_key=True)
exercise_device_parent = models.ForeignKey(ExerciseDevice, on_delete=models.CASCADE,
related_name='exercise_device_parent')
exercise_device_child = models.ForeignKey(ExerciseDevice, on_delete=models.CASCADE,
related_name='exercise_device_child')
class Meta:
db_table = 'exercise_device_alternative'
verbose_name = _("Device Alternative")
verbose_name_plural = _("Device Alternatives")
unique_together = ['exercise_device_parent', 'exercise_device_child']
class ExerciseTypeAlternative(models.Model):
exercise_type_alternative_id = models.AutoField(primary_key=True)
exercise_type_parent = models.ForeignKey(ExerciseType, on_delete=models.CASCADE, related_name='exercise_type_parent')
exercise_type_child = models.ForeignKey(ExerciseType, on_delete=models.CASCADE, related_name='exercise_type_child')
class Meta:
db_table = 'exercise_type_alternative'
verbose_name = _("Exercise Alternative")
verbose_name_plural = _("Exercise Alternatives")
#unique_together = [['exercise_type_parent', 'exercise_type_child']]
class ExerciseTypeParents(models.Model):
exercise_type_parents_id = models.AutoField(primary_key=True)
exercise_type = models.ForeignKey(ExerciseType, on_delete=models.CASCADE)
exercise_tree = models.ForeignKey(ExerciseTree, on_delete=models.CASCADE)
class Meta:
db_table = 'exercise_type_parents'
verbose_name = _("Exercise Parent")
verbose_name_plural = _("Exercise Parents")
unique_together= [['exercise_type', 'exercise_tree']]

View File

@ -14,9 +14,11 @@ import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...) # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
#BASE_DIR = Path(__file__).resolve().parent.parent.parent
LOCALE_PATHS = [ LOCALE_PATHS = [
'D:\\projects\\aitrainer\\src\\aitrainer_backoffice\\aitrainer_backoffice\\locale' 'D:\\projects\\aitrainer\\src\\aitrainer_backoffice\\aitrainer_backoffice\\locale',
os.path.join(BASE_DIR, 'locale')
] ]
# Quick-start development settings - unsuitable for production # Quick-start development settings - unsuitable for production
@ -107,7 +109,7 @@ AUTH_PASSWORD_VALIDATORS = [
# Internationalization # Internationalization
# https://docs.djangoproject.com/en/3.0/topics/i18n/ # https://docs.djangoproject.com/en/3.0/topics/i18n/
LANGUAGE_CODE = 'hu-HU' LANGUAGE_CODE = 'hu'
TIME_ZONE = 'Europe/Budapest' TIME_ZONE = 'Europe/Budapest'

View File

@ -15,6 +15,8 @@ import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...) # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
LOCALE_PATHS = [os.path.join(BASE_DIR, 'locale')]
# Quick-start development settings - unsuitable for production # Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/ # See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/

View File

@ -0,0 +1 @@
python manage.py shell --settings aitrainer_backoffice.settings.dev

View File

@ -0,0 +1 @@
django-admin makemessages -l hu --ignore venv --pythonpath "D:\projects\aitrainer\src\aitrainer_backoffice" --settings aitrainer_backoffice.aitrainer_backoffice.settings.dev