ExerciseTree parent optional fix, django 3.1.5 upgrade
This commit is contained in:
parent
4294ba250e
commit
e112303159
@ -12,6 +12,65 @@ from .models import ExercisePlanTranslation
|
|||||||
from .models import ExercisePlanDetail
|
from .models import ExercisePlanDetail
|
||||||
from .models import ExercisePlan
|
from .models import ExercisePlan
|
||||||
|
|
||||||
|
'''
|
||||||
|
ExerciseTree
|
||||||
|
------------
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
class TranslationTreeInline(admin.TabularInline):
|
||||||
|
model = ExerciseTreeTranslation
|
||||||
|
fields = ('language_code', 'name',)
|
||||||
|
extra = 0
|
||||||
|
|
||||||
|
|
||||||
|
class ExerciseTreeParentsInline(admin.TabularInline):
|
||||||
|
model = ExerciseTreeParents
|
||||||
|
fk_name = 'exercise_tree_child'
|
||||||
|
fields = ('exercise_tree_parent',)
|
||||||
|
extra = 0
|
||||||
|
|
||||||
|
|
||||||
|
class ExerciseTreeAdmin(admin.ModelAdmin):
|
||||||
|
list_display = ('tree_id', 'name_colored', 'active')
|
||||||
|
search_fields = ['name']
|
||||||
|
|
||||||
|
fields = ["name", "image_url", "active", "get_image_preview"]
|
||||||
|
readonly_fields = ("get_image_preview",)
|
||||||
|
|
||||||
|
def get_image_preview(self, obj):
|
||||||
|
image_url = '/media/' + str(obj.image_url)
|
||||||
|
if obj.pk:
|
||||||
|
return format_html('<img src="{url}" title="{url}" width="30%" height="30%"/> '
|
||||||
|
.format(url=image_url))
|
||||||
|
|
||||||
|
get_image_preview.short_description = _("Image Preview")
|
||||||
|
|
||||||
|
def name_colored(self, obj):
|
||||||
|
if obj.active:
|
||||||
|
if obj.image_url != "":
|
||||||
|
color_code = '7bc863'
|
||||||
|
else:
|
||||||
|
color_code = 'f2cdb3'
|
||||||
|
else:
|
||||||
|
color_code = 'C20000'
|
||||||
|
html = '<span style="color: #{};">{}</span>˓→'.format(color_code, obj.name)
|
||||||
|
return format_html(html)
|
||||||
|
|
||||||
|
name_colored.admin_order_field = 'name'
|
||||||
|
name_colored.short_description = 'name'
|
||||||
|
|
||||||
|
inlines = [
|
||||||
|
TranslationTreeInline,
|
||||||
|
ExerciseTreeParentsInline
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
'''
|
||||||
|
ExerciseTYPE
|
||||||
|
------------
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
class ExerciseTypeDeviceInline(admin.StackedInline):
|
class ExerciseTypeDeviceInline(admin.StackedInline):
|
||||||
model = ExerciseTypeDevice
|
model = ExerciseTypeDevice
|
||||||
@ -82,52 +141,10 @@ class ExerciseTypeAdmin(admin.ModelAdmin):
|
|||||||
exclude = ('exercise_tree',)
|
exclude = ('exercise_tree',)
|
||||||
|
|
||||||
|
|
||||||
class TranslationTreeInline(admin.TabularInline):
|
'''
|
||||||
model = ExerciseTreeTranslation
|
ExercisePlan
|
||||||
fields = ('language_code', 'name',)
|
------------
|
||||||
extra = 0
|
'''
|
||||||
|
|
||||||
|
|
||||||
class ExerciseTreeParentsInline(admin.TabularInline):
|
|
||||||
model = ExerciseTreeParents
|
|
||||||
fk_name = 'exercise_tree_child'
|
|
||||||
fields = ('exercise_tree_parent',)
|
|
||||||
extra = 0
|
|
||||||
|
|
||||||
|
|
||||||
class ExerciseTreeAdmin(admin.ModelAdmin):
|
|
||||||
list_display = ('tree_id', 'name_colored', 'active')
|
|
||||||
search_fields = ['name']
|
|
||||||
|
|
||||||
fields = ["name", "parent_id", "image_url", "active", "get_image_preview"]
|
|
||||||
readonly_fields = ("get_image_preview",)
|
|
||||||
|
|
||||||
def get_image_preview(self, obj):
|
|
||||||
image_url = '/media/' + str(obj.image_url)
|
|
||||||
if obj.pk:
|
|
||||||
return format_html('<img src="{url}" title="{url}" width="30%" height="30%"/> '
|
|
||||||
.format(url=image_url))
|
|
||||||
|
|
||||||
get_image_preview.short_description = _("Image Preview")
|
|
||||||
|
|
||||||
def name_colored(self, obj):
|
|
||||||
if obj.active:
|
|
||||||
if obj.image_url != "":
|
|
||||||
color_code = '7bc863'
|
|
||||||
else:
|
|
||||||
color_code = 'f2cdb3'
|
|
||||||
else:
|
|
||||||
color_code = 'C20000'
|
|
||||||
html = '<span style="color: #{};">{}</span>˓→'.format(color_code, obj.name)
|
|
||||||
return format_html(html)
|
|
||||||
|
|
||||||
name_colored.admin_order_field = 'name'
|
|
||||||
name_colored.short_description = 'name'
|
|
||||||
|
|
||||||
inlines = [
|
|
||||||
TranslationTreeInline,
|
|
||||||
ExerciseTreeParentsInline
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
class TranslationPlanInline(admin.TabularInline):
|
class TranslationPlanInline(admin.TabularInline):
|
||||||
@ -156,6 +173,7 @@ class ExercisePlanAdmin(admin.ModelAdmin):
|
|||||||
class ExercisePlanDetailAdmin(admin.ModelAdmin):
|
class ExercisePlanDetailAdmin(admin.ModelAdmin):
|
||||||
list_display = ('get_plan', 'get_exercise_type', 'serie', 'repeats', 'weight_equation',)
|
list_display = ('get_plan', 'get_exercise_type', 'serie', 'repeats', 'weight_equation',)
|
||||||
list_editable = ('serie', 'repeats', 'weight_equation',)
|
list_editable = ('serie', 'repeats', 'weight_equation',)
|
||||||
|
|
||||||
# list_editable_link('',)
|
# list_editable_link('',)
|
||||||
|
|
||||||
def get_plan(self, obj):
|
def get_plan(self, obj):
|
||||||
@ -167,6 +185,8 @@ class ExercisePlanDetailAdmin(admin.ModelAdmin):
|
|||||||
|
|
||||||
class ProductAdmin(admin.ModelAdmin):
|
class ProductAdmin(admin.ModelAdmin):
|
||||||
list_display = ('product_id', 'name', 'type')
|
list_display = ('product_id', 'name', 'type')
|
||||||
|
|
||||||
|
|
||||||
# Product.objects.all().aggregate(Sum('price'))
|
# Product.objects.all().aggregate(Sum('price'))
|
||||||
|
|
||||||
|
|
||||||
@ -238,4 +258,3 @@ 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.autodiscover()
|
admin.autodiscover()
|
||||||
|
|
||||||
|
@ -8,6 +8,12 @@ class LanguageTypes(models.TextChoices):
|
|||||||
HU = "hu"
|
HU = "hu"
|
||||||
|
|
||||||
|
|
||||||
|
'''
|
||||||
|
ExerciseDevice
|
||||||
|
------------
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
class ExerciseDevice(models.Model):
|
class ExerciseDevice(models.Model):
|
||||||
exercise_device_id = models.AutoField(primary_key=True)
|
exercise_device_id = models.AutoField(primary_key=True)
|
||||||
name = models.CharField(max_length=100)
|
name = models.CharField(max_length=100)
|
||||||
@ -30,9 +36,44 @@ class ExerciseDevice(models.Model):
|
|||||||
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 ExerciseDeviceTranslation(models.Model):
|
||||||
|
translation_id = models.AutoField(primary_key=True)
|
||||||
|
exercise_device = models.ForeignKey(ExerciseDevice, on_delete=models.CASCADE)
|
||||||
|
name = models.CharField(max_length=100)
|
||||||
|
language_code = models.CharField(max_length=2, choices=LanguageTypes.choices, default=LanguageTypes.HU)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
db_table = 'exercise_device_translation'
|
||||||
|
verbose_name = _("Translation")
|
||||||
|
verbose_name_plural = _("Translations")
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
|
'''
|
||||||
|
------------
|
||||||
|
ExerciseTree
|
||||||
|
------------
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
class ExerciseTree(models.Model):
|
class ExerciseTree(models.Model):
|
||||||
tree_id = models.AutoField(primary_key=True)
|
tree_id = models.AutoField(primary_key=True)
|
||||||
parent_id = models.IntegerField(help_text='This is the parent menu ID. 0 if it is on the top of the tree')
|
|
||||||
name = models.CharField(max_length=100, help_text='The name should be in English here')
|
name = models.CharField(max_length=100, help_text='The name should be in English here')
|
||||||
image_url = models.ImageField(upload_to='images/', help_text='The menu image size is 1366x768')
|
image_url = models.ImageField(upload_to='images/', help_text='The menu image size is 1366x768')
|
||||||
active = models.BooleanField(default=0, blank=True, null=True)
|
active = models.BooleanField(default=0, blank=True, null=True)
|
||||||
@ -46,6 +87,41 @@ class ExerciseTree(models.Model):
|
|||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
|
class ExerciseTreeTranslation(models.Model):
|
||||||
|
translation_id = models.AutoField(primary_key=True)
|
||||||
|
tree = models.ForeignKey(ExerciseTree, on_delete=models.CASCADE)
|
||||||
|
language_code = models.CharField(max_length=2, choices=LanguageTypes.choices, default=LanguageTypes.HU)
|
||||||
|
name = models.CharField(max_length=100)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
db_table = 'exercise_tree_translation'
|
||||||
|
verbose_name = _("Translation")
|
||||||
|
verbose_name_plural = _("Translations")
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
|
class ExerciseTreeParents(models.Model):
|
||||||
|
exercise_tree_parents_id = models.AutoField(primary_key=True)
|
||||||
|
exercise_tree_parent = models.ForeignKey(ExerciseTree, on_delete=models.CASCADE,
|
||||||
|
related_name=_('exercise_tree_parent'), help_text=_('Parent menu'), blank=True)
|
||||||
|
exercise_tree_child = models.ForeignKey(ExerciseTree, on_delete=models.CASCADE,
|
||||||
|
related_name=_('exercise_tree_child'), help_text=_('Actual menu'))
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
db_table = 'exercise_tree_parents'
|
||||||
|
verbose_name = _("Exercise Tree Parent")
|
||||||
|
verbose_name_plural = _("Exercise Tree Parents")
|
||||||
|
unique_together = [['exercise_tree_parent', 'exercise_tree_child']]
|
||||||
|
|
||||||
|
|
||||||
|
'''
|
||||||
|
ExerciseTYPE
|
||||||
|
------------
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
class ExerciseType(models.Model):
|
class ExerciseType(models.Model):
|
||||||
class UnitTypes(models.TextChoices):
|
class UnitTypes(models.TextChoices):
|
||||||
REPEAT = 'repeat'
|
REPEAT = 'repeat'
|
||||||
@ -58,7 +134,6 @@ class ExerciseType(models.Model):
|
|||||||
KG = 'kilogram'
|
KG = 'kilogram'
|
||||||
|
|
||||||
exercise_type_id = models.AutoField(primary_key=True)
|
exercise_type_id = models.AutoField(primary_key=True)
|
||||||
# tree = models.ForeignKey(ExerciseTree, on_delete=models.CASCADE)
|
|
||||||
name = models.CharField(max_length=100, help_text='The name should be in English here')
|
name = models.CharField(max_length=100, help_text='The name should be in English here')
|
||||||
description = models.TextField(max_length=1000, blank=True, null=True, help_text='The description should be in '
|
description = models.TextField(max_length=1000, blank=True, null=True, help_text='The description should be in '
|
||||||
'English here')
|
'English here')
|
||||||
@ -70,7 +145,6 @@ class ExerciseType(models.Model):
|
|||||||
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')
|
parents = models.ManyToManyField(ExerciseTree, through='ExerciseTypeParents', related_name='ExerciseTree')
|
||||||
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = 'exercise_type'
|
db_table = 'exercise_type'
|
||||||
verbose_name = _("Exercise")
|
verbose_name = _("Exercise")
|
||||||
@ -117,19 +191,41 @@ class ExerciseTypeTranslation(models.Model):
|
|||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
class ExerciseTreeTranslation(models.Model):
|
class ExerciseTypeDevice(models.Model):
|
||||||
translation_id = models.AutoField(primary_key=True)
|
exercise_type_device_id = models.AutoField(primary_key=True)
|
||||||
tree = models.ForeignKey(ExerciseTree, on_delete=models.CASCADE)
|
exercise_type = models.ForeignKey(ExerciseType, on_delete=models.CASCADE)
|
||||||
language_code = models.CharField(max_length=2, choices=LanguageTypes.choices, default=LanguageTypes.HU)
|
exercise_device = models.ForeignKey(ExerciseDevice, on_delete=models.CASCADE)
|
||||||
name = models.CharField(max_length=100)
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = 'exercise_tree_translation'
|
db_table = 'exercise_type_device'
|
||||||
verbose_name = _("Translation")
|
verbose_name = _("Exercise Device")
|
||||||
verbose_name_plural = _("Translations")
|
verbose_name_plural = _("Exercise Devices")
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self.name
|
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']]
|
||||||
|
|
||||||
|
|
||||||
class ExercisePlan(models.Model):
|
class ExercisePlan(models.Model):
|
||||||
@ -240,81 +336,3 @@ class PropertyTranslation(models.Model):
|
|||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.property_name
|
return self.property_name
|
||||||
|
|
||||||
|
|
||||||
class ExerciseTypeDevice(models.Model):
|
|
||||||
exercise_type_device_id = models.AutoField(primary_key=True)
|
|
||||||
exercise_type = models.ForeignKey(ExerciseType, on_delete=models.CASCADE)
|
|
||||||
exercise_device = models.ForeignKey(ExerciseDevice, on_delete=models.CASCADE)
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
db_table = 'exercise_type_device'
|
|
||||||
verbose_name = _("Exercise Device")
|
|
||||||
verbose_name_plural = _("Exercise Devices")
|
|
||||||
|
|
||||||
|
|
||||||
class ExerciseDeviceTranslation(models.Model):
|
|
||||||
translation_id = models.AutoField(primary_key=True)
|
|
||||||
exercise_device = models.ForeignKey(ExerciseDevice, on_delete=models.CASCADE)
|
|
||||||
name = models.CharField(max_length=100)
|
|
||||||
language_code = models.CharField(max_length=2, choices=LanguageTypes.choices, default=LanguageTypes.HU)
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
db_table = 'exercise_device_translation'
|
|
||||||
verbose_name = _("Translation")
|
|
||||||
verbose_name_plural = _("Translations")
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
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']]
|
|
||||||
|
|
||||||
|
|
||||||
class ExerciseTreeParents(models.Model):
|
|
||||||
exercise_tree_parents_id = models.AutoField(primary_key=True)
|
|
||||||
exercise_tree_parent = models.ForeignKey(ExerciseTree, on_delete=models.CASCADE, related_name=_('exercise_tree_parent'), help_text=_('Parent menu'))
|
|
||||||
exercise_tree_child = models.ForeignKey(ExerciseTree, on_delete=models.CASCADE, related_name=_('exercise_tree_child'), help_text=_('Actual menu'))
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
db_table = 'exercise_tree_parents'
|
|
||||||
verbose_name = _("Exercise Tree Parent")
|
|
||||||
verbose_name_plural = _("Exercise Tree Parents")
|
|
||||||
unique_together= [['exercise_tree_parent', 'exercise_tree_child']]
|
|
@ -1,4 +1,4 @@
|
|||||||
django==3.1.4
|
django==3.1.5
|
||||||
asgiref==3.2.10
|
asgiref==3.2.10
|
||||||
certifi==2020.6.20
|
certifi==2020.6.20
|
||||||
chardet==3.0.4
|
chardet==3.0.4
|
||||||
|
Loading…
Reference in New Issue
Block a user