from django.contrib import admin from django.contrib.admin import ModelAdmin from django.core.urlresolvers import reverse from src.typeclasses.models import Attribute, Tag class TagAdmin(admin.ModelAdmin): fields = ('db_key', 'db_category', 'db_data') class TagInline(admin.TabularInline): # Set this to the through model of your desired M2M when subclassing. model = None raw_id_fields = ('tag',) extra = 0 class AttributeInline(admin.TabularInline): """ Inline creation of player attributes """ # Set this to the through model of your desired M2M when subclassing. model = None extra = 1 #form = AttributeForm fields = ('attribute', 'key', 'value', 'strvalue') raw_id_fields = ('attribute',) readonly_fields = ('key', 'value', 'strvalue') def key(self, instance): if not instance.id: return "Not yet set or saved." return '%s' % ( reverse("admin:typeclasses_attribute_change", args=[instance.attribute.id]), instance.attribute.db_key) key.allow_tags = True def value(self, instance): if not instance.id: return "Not yet set or saved." return instance.attribute.db_value def strvalue(self, instance): if not instance.id: return "Not yet set or saved." return instance.attribute.db_strvalue class AttributeAdmin(ModelAdmin): """ Defines how to display the attributes """ search_fields = ('db_key', 'db_strvalue', 'db_value') list_display = ('db_key', 'db_strvalue', 'db_value') permitted_types = ('str', 'int', 'float', 'NoneType', 'bool') fields = ('db_key', 'db_value', 'db_strvalue', 'db_category', 'db_lock_storage', 'db_model', 'db_attrtype') def get_readonly_fields(self, request, obj=None): if obj.db_value.__class__.__name__ not in self.permitted_types: return ['db_value'] return [] admin.site.register(Attribute, AttributeAdmin) admin.site.register(Tag, TagAdmin)