diff --git a/artists/admin.py b/artists/admin.py index 406398d..8dc77de 100644 --- a/artists/admin.py +++ b/artists/admin.py @@ -1,8 +1,54 @@ from django.contrib import admin -from . import models +from django import forms + +from .models import Artist +from categories.models import Category + # Register your models here. +class ArtistForm(forms.ModelForm): + categories_str = forms.CharField(label='Category', required=False) + aliases_str = forms.CharField(label='Aliases') + class Meta: + model = Artist + fields = [ + 'name', + 'romanized_name', + 'slug', + 'categories_str', + 'aliases_str', + 'about_artist', + 'about_music', + ] + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields['about_artist'].widget.attrs['class'] = 'tm-textfield' + self.fields['about_music'].widget.attrs['class'] = 'tm-textfield' + instance = kwargs.get("instance") + if instance: + self.fields['categories_str'].initial = ", ".join(x.name for x in instance.category.all() ) + self.fields['aliases_str'].initial = ", ".join(x.romanized_name for x in instance.aliases.all() ) class ArtistAdmin(admin.ModelAdmin): + form = ArtistForm search_fields = ['romanized_name','name'] -admin.site.register(models.Artist, ArtistAdmin) + class Media: + js = ( + 'https://cdnjs.cloudflare.com/ajax/libs/tinymce/5.6.2/tinymce.min.js', + 'tinymce-init.js' + ) + def save_model(self, request, obj, form, change): + categories_str = form.cleaned_data.get('categories_str') + categories = Category.objects.comma_to_qs(categories_str) + aliases_str = form.cleaned_data.get('aliases_str') + aliases = Artist.objects.comma_to_qs(aliases_str) + if not obj.id: + obj.save() + obj.category.clear() + obj.category.add(*categories) + obj.aliases.clear() + obj.aliases.add(*aliases) + obj.save() + +admin.site.register(Artist, ArtistAdmin) diff --git a/artists/models.py b/artists/models.py index 551e0af..d89c15a 100644 --- a/artists/models.py +++ b/artists/models.py @@ -4,17 +4,10 @@ from django.utils.text import slugify # Create your models here. class ArtistManager(models.Manager): - def create_or_new(self, romanized_name): - romanized_name = romanized_name.strip() - qs = self.get_queryset().filter(romanized_name__iexact=romanized_name) - if qs.exists(): - return qs.first(), False - return Artist.objects.create(romanized_name=romanized_name), True - def comma_to_qs(self, artists_str): final_ids = [] for artist in artists_str.split(','): - obj, created = self.create_or_new(artist.strip()) + obj, created = self.get_or_create(romanized_name=artist.strip()) final_ids.append(obj.id) qs = self.get_queryset().filter(id__in=final_ids).distinct() return qs diff --git a/artists/templates/artists/show.html b/artists/templates/artists/show.html index 1f47e02..47e608c 100644 --- a/artists/templates/artists/show.html +++ b/artists/templates/artists/show.html @@ -50,9 +50,9 @@

About Artist

-

{{ artist.about_artist }}

+
{{ artist.about_artist|safe }}

About Music

-

{{ artist.about_music }}

+
{{ artist.about_music|safe }}

Credits

{% include 'components/song-table.html' with songs=credit_songs %}

Sample works outside Idolmaster

diff --git a/categories/admin.py b/categories/admin.py index 5ae483d..64b4e32 100644 --- a/categories/admin.py +++ b/categories/admin.py @@ -1,13 +1,47 @@ from django.contrib import admin +from django import forms -from . import models +from .models import Branch, Category # Register your models here. +class BranchForm(forms.ModelForm): + class Meta: + model = Branch + exclude = [] + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields['description'].widget.attrs['class'] = 'tm-textfield' + +class CategoryForm(forms.ModelForm): + + class Meta: + model = Category + exclude = [] + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields['description'].widget.attrs['class'] = 'tm-textfield' + class BranchAdmin(admin.ModelAdmin): + form = BranchForm search_fields = ['name', 'acronym'] + class Media: + js = ( + 'https://cdnjs.cloudflare.com/ajax/libs/tinymce/5.6.2/tinymce.min.js', + 'tinymce-init.js' + ) + class CategoryAdmin(admin.ModelAdmin): + form = CategoryForm search_fields = ['name'] -admin.site.register(models.Branch, BranchAdmin) -admin.site.register(models.Category,CategoryAdmin) + class Media: + js = ( + 'https://cdnjs.cloudflare.com/ajax/libs/tinymce/5.6.2/tinymce.min.js', + 'tinymce-init.js' + ) + +admin.site.register(Branch, BranchAdmin) +admin.site.register(Category,CategoryAdmin) diff --git a/categories/models.py b/categories/models.py index 3b4250e..3c71ad4 100644 --- a/categories/models.py +++ b/categories/models.py @@ -12,17 +12,10 @@ class Branch(models.Model): # Create your models here. class CategoryManager(models.Manager): - def create_or_new(self, name): - name = name.strip() - qs = self.get_queryset().filter(name__iexact=name) - if qs.exists(): - return qs.first(), False - return Category.objects.create(name=name), True - - def comma_to_qs(self, categorys_str): + def comma_to_qs(self, categories_str): final_ids = [] for category in categories_str.split(','): - obj, created = self.create_or_new(category) + obj, created = self.get_or_create(name=category.strip()) final_ids.append(obj.id) qs = self.get_queryset().filter(id__in=final_ids).distinct() return qs diff --git a/categories/templates/branches/show.html b/categories/templates/branches/show.html index 1bac4fa..abdf5c1 100644 --- a/categories/templates/branches/show.html +++ b/categories/templates/branches/show.html @@ -3,7 +3,7 @@ {% block content %}

[{{ branch.acronym }}] {{ branch.name }}

Description

-

{{ branch.description }}

+
{{ branch.description|safe }}

Songs

{% include 'components/song-table.html' with songs=page_obj %}