mirror of
https://github.com/evennia/evennia.git
synced 2026-03-24 08:46:31 +01:00
91 lines
2 KiB
Python
91 lines
2 KiB
Python
#
|
|
# This sets up how models are displayed
|
|
# in the web admin interface.
|
|
#
|
|
from django.conf import settings
|
|
|
|
from evennia.typeclasses.admin import AttributeInline, TagInline
|
|
|
|
from evennia.scripts.models import ScriptDB
|
|
from django.contrib import admin
|
|
|
|
|
|
class ScriptTagInline(TagInline):
|
|
"""
|
|
Inline script tags.
|
|
|
|
"""
|
|
|
|
model = ScriptDB.db_tags.through
|
|
related_field = "scriptdb"
|
|
|
|
|
|
class ScriptAttributeInline(AttributeInline):
|
|
"""
|
|
Inline attribute tags.
|
|
|
|
"""
|
|
|
|
model = ScriptDB.db_attributes.through
|
|
related_field = "scriptdb"
|
|
|
|
|
|
class ScriptDBAdmin(admin.ModelAdmin):
|
|
"""
|
|
Displaying the main Script page.
|
|
|
|
"""
|
|
|
|
list_display = (
|
|
"id",
|
|
"db_key",
|
|
"db_typeclass_path",
|
|
"db_obj",
|
|
"db_interval",
|
|
"db_repeats",
|
|
"db_persistent",
|
|
)
|
|
list_display_links = ("id", "db_key")
|
|
ordering = ["db_obj", "db_typeclass_path"]
|
|
search_fields = ["^db_key", "db_typeclass_path"]
|
|
save_as = True
|
|
save_on_top = True
|
|
list_select_related = True
|
|
raw_id_fields = ("db_obj",)
|
|
|
|
fieldsets = (
|
|
(
|
|
None,
|
|
{
|
|
"fields": (
|
|
("db_key", "db_typeclass_path"),
|
|
"db_interval",
|
|
"db_repeats",
|
|
"db_start_delay",
|
|
"db_persistent",
|
|
"db_obj",
|
|
)
|
|
},
|
|
),
|
|
)
|
|
inlines = [ScriptTagInline, ScriptAttributeInline]
|
|
|
|
def save_model(self, request, obj, form, change):
|
|
"""
|
|
Model-save hook.
|
|
|
|
Args:
|
|
request (Request): Incoming request.
|
|
obj (Object): Database object.
|
|
form (Form): Form instance.
|
|
change (bool): If this is a change or a new object.
|
|
|
|
"""
|
|
obj.save()
|
|
if not change:
|
|
# adding a new object
|
|
# have to call init with typeclass passed to it
|
|
obj.set_class_from_typeclass(typeclass_path=obj.db_typeclass_path)
|
|
|
|
|
|
admin.site.register(ScriptDB, ScriptDBAdmin)
|