2010-08-29 18:46:58 +00:00
#
# This sets up how models are displayed
# in the web admin interface.
#
2011-10-02 22:37:07 +02:00
from django import forms
from django . conf import settings
2009-04-17 03:08:18 +00:00
from django . contrib import admin
2011-10-02 22:37:07 +02:00
from src . objects . models import ObjAttribute , ObjectDB
from src . utils . utils import mod_import
class ObjectAttributeAdmin ( admin . ModelAdmin ) :
list_display = ( ' id ' , ' db_key ' , ' db_obj ' )
list_display_links = ( ' id ' , ' db_key ' )
ordering = ( ' db_obj ' , ' db_key ' , ' id ' )
search_fields = ( ' ^db_key ' , ' db_obj ' )
save_as = True
save_on_top = True
list_select_related = True
admin . site . register ( ObjAttribute , ObjectAttributeAdmin )
2009-04-17 03:08:18 +00:00
2011-09-15 00:28:26 +02:00
class ObjAttributeInline ( admin . TabularInline ) :
model = ObjAttribute
fields = ( ' db_key ' , ' db_value ' )
2011-10-02 22:37:07 +02:00
extra = 1
class ObjectEditForm ( forms . ModelForm ) :
" This form details the look of the fields "
class Meta :
model = ObjectDB
db_typeclass_path = forms . CharField ( label = " Typeclass " , initial = settings . BASE_OBJECT_TYPECLASS ,
help_text = " this defines what ' type ' of entity this is. This variable holds a Python path to a module with a valid Evennia Typeclass. " )
db_permissions = forms . CharField ( label = " Permissions " , required = False ,
help_text = " a comma-separated list of text strings checked by certain locks. They are mainly of use for Character objects. Character permissions overload permissions defined on a controlling Player. Most objects normally don ' t have any permissions defined. " )
db_lock_storage = forms . CharField ( label = " Locks " , required = False , widget = forms . Textarea ( attrs = { ' cols ' : ' 100 ' , ' rows ' : ' 1 ' } ) ,
help_text = " locks limit access to an entity. A lock is defined as a ' lock string ' on the form ' type:lockfunctions ' , defining what functionality is locked and how to determine access. Take a look at other Objects to see valid strings. An empty lock means no access is given to anything for anyone. " )
2009-04-17 03:08:18 +00:00
2011-10-02 22:37:07 +02:00
class ObjectCreateForm ( forms . ModelForm ) :
" This form details the look of the fields "
class Meta :
model = ObjectDB
fields = ( ' db_key ' , )
db_typeclass_path = forms . CharField ( label = " Typeclass " , initial = settings . BASE_OBJECT_TYPECLASS ,
help_text = " this defines what ' type ' of entity this is. This variable holds a Python path to a module with a valid Evennia Typeclass. " )
db_permissions = forms . CharField ( label = " Permissions " , initial = settings . PERMISSION_PLAYER_DEFAULT , required = False ,
help_text = " a comma-separated list of text strings checked by certain locks. They are mainly of use for Character objects. Character permissions overload permissions defined on a controlling Player. Most objects normally don ' t have any permissions defined. " )
2011-10-02 01:21:03 +02:00
class ObjectDBAdmin ( admin . ModelAdmin ) :
2011-10-02 22:37:07 +02:00
2011-09-15 00:28:26 +02:00
list_display = ( ' id ' , ' db_key ' , ' db_location ' , ' db_player ' , ' db_typeclass_path ' )
2010-08-29 18:46:58 +00:00
list_display_links = ( ' id ' , ' db_key ' )
2011-09-15 00:28:26 +02:00
ordering = [ ' db_player ' , ' db_typeclass_path ' , ' id ' ]
2010-08-29 18:46:58 +00:00
search_fields = [ ' ^db_key ' , ' db_typeclass_path ' ]
2011-10-02 01:21:03 +02:00
2010-08-29 18:46:58 +00:00
save_as = True
2009-04-17 03:08:18 +00:00
save_on_top = True
2010-08-29 18:46:58 +00:00
list_select_related = True
2011-10-02 22:37:07 +02:00
# editing fields setup
form = ObjectEditForm
fieldsets = (
( None , {
' fields ' : ( ( ' db_key ' , ' db_typeclass_path ' ) , ( ' db_permissions ' , ' db_lock_storage ' ) ,
( ' db_location ' , ' db_home ' ) , ' db_destination ' , ' db_cmdset_storage '
) } ) ,
)
#deactivated temporarily, they cause empty objects to be created in admin
#inlines = [ObjAttributeInline]
# Custom modification to give two different forms wether adding or not.
add_form = ObjectCreateForm
add_fieldsets = (
( None , {
' fields ' : ( ( ' db_key ' , ' db_typeclass_path ' ) , ' db_permissions ' ,
( ' db_location ' , ' db_home ' ) , ' db_destination ' , ' db_cmdset_storage '
) } ) ,
)
def get_fieldsets ( self , request , obj = None ) :
if not obj :
return self . add_fieldsets
return super ( ObjectDBAdmin , self ) . get_fieldsets ( request , obj )
def get_form ( self , request , obj = None , * * kwargs ) :
"""
Use special form during creation
"""
defaults = { }
if obj is None :
defaults . update ( {
' form ' : self . add_form ,
' fields ' : admin . util . flatten_fieldsets ( self . add_fieldsets ) ,
} )
defaults . update ( kwargs )
return super ( ObjectDBAdmin , self ) . get_form ( request , obj , * * defaults )
def save_model ( self , request , obj , form , change ) :
if not change :
# adding a new object
obj = obj . typeclass
obj . basetype_setup ( )
obj . basetype_posthook_setup ( )
obj . at_object_creation ( )
obj . at_init ( )
2011-10-02 01:21:03 +02:00
2010-08-29 18:46:58 +00:00
admin . site . register ( ObjectDB , ObjectDBAdmin )