API 1.0.16 - Alternatives, Exercise Type Parents, Translations
This commit is contained in:
parent
7b35f107ac
commit
ae782f7703
@ -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()
|
||||||
|
|
||||||
|
Binary file not shown.
@ -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"
|
@ -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']]
|
@ -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'
|
||||||
|
|
||||||
|
@ -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/
|
||||||
|
|
||||||
|
1
aitrainer_backoffice/shell.bat
Normal file
1
aitrainer_backoffice/shell.bat
Normal file
@ -0,0 +1 @@
|
|||||||
|
python manage.py shell --settings aitrainer_backoffice.settings.dev
|
1
aitrainer_backoffice/translate.bat
Normal file
1
aitrainer_backoffice/translate.bat
Normal 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
|
Loading…
Reference in New Issue
Block a user