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 %}