More admin sorting/list cleanup
This commit is contained in:
parent
1bdcafcef4
commit
12a251cdcc
5 changed files with 51 additions and 116 deletions
|
|
@ -74,8 +74,6 @@ class AccountChangeForm(UserChangeForm):
|
||||||
initial=settings.CMDSET_ACCOUNT,
|
initial=settings.CMDSET_ACCOUNT,
|
||||||
widget=forms.TextInput(attrs={"size": "78"}),
|
widget=forms.TextInput(attrs={"size": "78"}),
|
||||||
required=False,
|
required=False,
|
||||||
help_text="Python path to account cmdset class (set via "
|
|
||||||
"settings.CMDSET_ACCOUNT by default)",
|
|
||||||
)
|
)
|
||||||
|
|
||||||
def clean_username(self):
|
def clean_username(self):
|
||||||
|
|
@ -90,6 +88,21 @@ class AccountChangeForm(UserChangeForm):
|
||||||
raise forms.ValidationError("An account with that name " "already exists.")
|
raise forms.ValidationError("An account with that name " "already exists.")
|
||||||
return self.cleaned_data["username"]
|
return self.cleaned_data["username"]
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Tweak some fields dynamically.
|
||||||
|
|
||||||
|
"""
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
# better help text for cmdset_storage
|
||||||
|
account_cmdset = settings.CMDSET_ACCOUNT
|
||||||
|
self.fields["db_cmdset_storage"].help_text = (
|
||||||
|
"Path to Command-set path. Most non-character objects don't need a cmdset"
|
||||||
|
" and can leave this field blank. Default cmdset-path<BR> for Accounts "
|
||||||
|
f"is <strong>{account_cmdset}</strong> ."
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class AccountCreationForm(UserCreationForm):
|
class AccountCreationForm(UserCreationForm):
|
||||||
"""
|
"""
|
||||||
|
|
@ -122,101 +135,6 @@ class AccountCreationForm(UserCreationForm):
|
||||||
return username
|
return username
|
||||||
|
|
||||||
|
|
||||||
class AccountForm(forms.ModelForm):
|
|
||||||
"""
|
|
||||||
Defines how to display Accounts
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = AccountDB
|
|
||||||
fields = "__all__"
|
|
||||||
app_label = "accounts"
|
|
||||||
|
|
||||||
db_key = forms.RegexField(
|
|
||||||
label="Username",
|
|
||||||
initial="AccountDummy",
|
|
||||||
max_length=30,
|
|
||||||
regex=r"^[\w. @+-]+$",
|
|
||||||
required=False,
|
|
||||||
widget=forms.TextInput(attrs={"size": "30"}),
|
|
||||||
error_messages={
|
|
||||||
"invalid": "This value may contain only letters, spaces, numbers"
|
|
||||||
" and @/./+/-/_ characters."
|
|
||||||
},
|
|
||||||
help_text="This should be the same as the connected Account's key "
|
|
||||||
"name. 30 characters or fewer. Letters, spaces, digits and "
|
|
||||||
"@/./+/-/_ only.",
|
|
||||||
)
|
|
||||||
|
|
||||||
db_typeclass_path = forms.ChoiceField(
|
|
||||||
label="Typeclass",
|
|
||||||
initial={settings.BASE_ACCOUNT_TYPECLASS: settings.BASE_ACCOUNT_TYPECLASS},
|
|
||||||
help_text="This is the Python-path to the class implementing the actual "
|
|
||||||
"account functionality. You usually don't need to change this from"
|
|
||||||
"the default.<BR>If your custom class is not found here, it may not be "
|
|
||||||
"imported as part of Evennia's startup.",
|
|
||||||
choices=adminutils.get_and_load_typeclasses(parent=AccountDB),
|
|
||||||
)
|
|
||||||
|
|
||||||
db_lock_storage = forms.CharField(
|
|
||||||
label="Locks",
|
|
||||||
required=False,
|
|
||||||
help_text="Locks limit access to the entity. Written on form `type:lockdef;type:lockdef..."
|
|
||||||
"<BR>(Permissions (used with the perm() lockfunc) are Tags with the 'permission' type)",
|
|
||||||
)
|
|
||||||
|
|
||||||
db_lock_storage = forms.CharField(
|
|
||||||
label="Locks",
|
|
||||||
widget=forms.Textarea(attrs={"cols": "100", "rows": "2"}),
|
|
||||||
required=False,
|
|
||||||
help_text="In-game lock definition string. If not given, defaults "
|
|
||||||
"will be used. This string should be on the form "
|
|
||||||
"<i>type:lockfunction(args);type2:lockfunction2(args);...",
|
|
||||||
)
|
|
||||||
db_cmdset_storage = forms.CharField(
|
|
||||||
label="cmdset",
|
|
||||||
initial=settings.CMDSET_ACCOUNT,
|
|
||||||
widget=forms.TextInput(attrs={"size": "78"}),
|
|
||||||
required=False,
|
|
||||||
help_text="python path to account cmdset class (set in "
|
|
||||||
"settings.CMDSET_ACCOUNT by default)",
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class AccountInline(admin.StackedInline):
|
|
||||||
"""
|
|
||||||
Inline creation of Account
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
model = AccountDB
|
|
||||||
template = "admin/accounts/stacked.html"
|
|
||||||
form = AccountForm
|
|
||||||
fieldsets = (
|
|
||||||
(
|
|
||||||
"In-game Permissions and Locks",
|
|
||||||
{
|
|
||||||
"fields": ("db_lock_storage",),
|
|
||||||
# {'fields': ('db_permissions', 'db_lock_storage'),
|
|
||||||
"description": "<i>These are permissions/locks for in-game use. "
|
|
||||||
"They are unrelated to website access rights.</i>",
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"In-game Account data",
|
|
||||||
{
|
|
||||||
"fields": ("db_typeclass_path", "db_cmdset_storage"),
|
|
||||||
"description": "<i>These fields define in-game-specific properties "
|
|
||||||
"for the Account object in-game.</i>",
|
|
||||||
},
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
extra = 1
|
|
||||||
max_num = 1
|
|
||||||
|
|
||||||
|
|
||||||
class AccountTagInline(TagInline):
|
class AccountTagInline(TagInline):
|
||||||
"""
|
"""
|
||||||
Inline Account Tags.
|
Inline Account Tags.
|
||||||
|
|
@ -243,6 +161,7 @@ class ObjectPuppetInline(admin.StackedInline):
|
||||||
"""
|
"""
|
||||||
from .objects import ObjectCreateForm
|
from .objects import ObjectCreateForm
|
||||||
|
|
||||||
|
verbose_name = "Puppeted Object"
|
||||||
model = ObjectDB
|
model = ObjectDB
|
||||||
view_on_site = False
|
view_on_site = False
|
||||||
show_change_link = True
|
show_change_link = True
|
||||||
|
|
@ -269,6 +188,13 @@ class ObjectPuppetInline(admin.StackedInline):
|
||||||
"db_location", "db_home", "db_account",
|
"db_location", "db_home", "db_account",
|
||||||
"db_cmdset_storage", "db_lock_storage")
|
"db_cmdset_storage", "db_lock_storage")
|
||||||
|
|
||||||
|
# disable adding/deleting this inline - read-only!
|
||||||
|
def has_add_permission(self, request, obj=None):
|
||||||
|
return False
|
||||||
|
|
||||||
|
def has_delete_permission(self, request, obj=None):
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
@admin.register(AccountDB)
|
@admin.register(AccountDB)
|
||||||
class AccountAdmin(BaseUserAdmin):
|
class AccountAdmin(BaseUserAdmin):
|
||||||
|
|
@ -276,9 +202,13 @@ class AccountAdmin(BaseUserAdmin):
|
||||||
This is the main creation screen for Users/accounts
|
This is the main creation screen for Users/accounts
|
||||||
|
|
||||||
"""
|
"""
|
||||||
list_display = ("username", "email", "is_staff", "is_superuser")
|
list_display = ("id", "username", "is_staff", "is_superuser", "db_typeclass_path", "db_date_created")
|
||||||
|
list_display_links = ("id", "username")
|
||||||
form = AccountChangeForm
|
form = AccountChangeForm
|
||||||
add_form = AccountCreationForm
|
add_form = AccountCreationForm
|
||||||
|
search_fields = ["=id", "^username", "db_typeclass_path"]
|
||||||
|
ordering = ["-db_date_created", "id"]
|
||||||
|
list_filter = ["is_superuser", "is_staff", "db_typeclass_path"]
|
||||||
inlines = [AccountTagInline, AccountAttributeInline, ObjectPuppetInline]
|
inlines = [AccountTagInline, AccountAttributeInline, ObjectPuppetInline]
|
||||||
readonly_fields = ["db_date_created", "serialized_string"]
|
readonly_fields = ["db_date_created", "serialized_string"]
|
||||||
view_on_site = False
|
view_on_site = False
|
||||||
|
|
|
||||||
|
|
@ -56,19 +56,22 @@ class MsgAdmin(admin.ModelAdmin):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
inlines = [MsgTagInline]
|
||||||
|
form = MsgForm
|
||||||
list_display = (
|
list_display = (
|
||||||
"id",
|
"id",
|
||||||
"db_date_created",
|
"db_date_created",
|
||||||
"sender",
|
"sender",
|
||||||
"receiver",
|
"receiver",
|
||||||
"start_of_message"
|
"start_of_message",
|
||||||
)
|
)
|
||||||
list_display_links = ("id", "db_date_created", "start_of_message")
|
list_display_links = ("id", "db_date_created", "start_of_message")
|
||||||
inlines = [MsgTagInline]
|
ordering = ["-db_date_created", "-id"]
|
||||||
form = MsgForm
|
search_fields = ["=id", "^db_date_created", "^db_message",
|
||||||
ordering = ["db_date_created", ]
|
"^db_sender_accounts__db_key", "^db_sender_objects__db_key",
|
||||||
# readonly_fields = ['db_message', 'db_sender', 'db_receivers', 'db_channels']
|
"^db_sender_scripts__db_key", "^db_sender_external",
|
||||||
search_fields = ["id", "^db_date_created", "^db_message"]
|
"^db_receivers_accounts__db_key", "^db_receivers_objects__db_key",
|
||||||
|
"^db_receivers_scripts__db_key", "^db_receiver_external"]
|
||||||
readonly_fields = ["db_date_created", "serialized_string"]
|
readonly_fields = ["db_date_created", "serialized_string"]
|
||||||
save_as = True
|
save_as = True
|
||||||
save_on_top = True
|
save_on_top = True
|
||||||
|
|
@ -189,9 +192,10 @@ class ChannelAdmin(admin.ModelAdmin):
|
||||||
|
|
||||||
inlines = [ChannelTagInline, ChannelAttributeInline]
|
inlines = [ChannelTagInline, ChannelAttributeInline]
|
||||||
form = ChannelForm
|
form = ChannelForm
|
||||||
list_display = ("id", "db_key", "no_of_subscribers", "db_lock_storage")
|
list_display = ("id", "db_key", "no_of_subscribers", "db_lock_storage", "db_typeclass_path",
|
||||||
|
"db_date_created")
|
||||||
list_display_links = ("id", "db_key")
|
list_display_links = ("id", "db_key")
|
||||||
ordering = ["db_key"]
|
ordering = ["-db_date_created", "-id", "-db_key"]
|
||||||
search_fields = ["id", "db_key", "db_tags__db_key"]
|
search_fields = ["id", "db_key", "db_tags__db_key"]
|
||||||
readonly_fields = ["serialized_string"]
|
readonly_fields = ["serialized_string"]
|
||||||
save_as = True
|
save_as = True
|
||||||
|
|
|
||||||
|
|
@ -35,10 +35,11 @@ class HelpEntryForm(forms.ModelForm):
|
||||||
class HelpEntryAdmin(admin.ModelAdmin):
|
class HelpEntryAdmin(admin.ModelAdmin):
|
||||||
"Sets up the admin manaager for help entries"
|
"Sets up the admin manaager for help entries"
|
||||||
inlines = [HelpTagInline]
|
inlines = [HelpTagInline]
|
||||||
list_display = ("id", "db_key", "db_help_category", "db_lock_storage")
|
list_display = ("id", "db_key", "db_help_category", "db_lock_storage", "db_date_created")
|
||||||
list_display_links = ("id", "db_key")
|
list_display_links = ("id", "db_key")
|
||||||
search_fields = ["^db_key", "db_entrytext"]
|
search_fields = ["^db_key", "db_entrytext"]
|
||||||
ordering = ["db_help_category", "db_key"]
|
ordering = ["db_help_category", "db_key"]
|
||||||
|
list_filter = ["db_help_category"]
|
||||||
save_as = True
|
save_as = True
|
||||||
save_on_top = True
|
save_on_top = True
|
||||||
list_select_related = True
|
list_select_related = True
|
||||||
|
|
|
||||||
|
|
@ -129,12 +129,11 @@ class ObjectCreateForm(forms.ModelForm):
|
||||||
account_cmdset = settings.CMDSET_ACCOUNT
|
account_cmdset = settings.CMDSET_ACCOUNT
|
||||||
self.fields["db_cmdset_storage"].help_text = (
|
self.fields["db_cmdset_storage"].help_text = (
|
||||||
"Path to Command-set path. Most non-character objects don't need a cmdset"
|
"Path to Command-set path. Most non-character objects don't need a cmdset"
|
||||||
" and can leave this field blank. Some common cmdset-paths<BR> are "
|
" and can leave this field blank. Default cmdset-path<BR> for Characters "
|
||||||
f"<strong>{char_cmdset}</strong> and <strong>{account_cmdset}</strong>"
|
f"is <strong>{char_cmdset}</strong> ."
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ObjectEditForm(ObjectCreateForm):
|
class ObjectEditForm(ObjectCreateForm):
|
||||||
"""
|
"""
|
||||||
Form used for editing. Extends the create one with more fields
|
Form used for editing. Extends the create one with more fields
|
||||||
|
|
@ -164,10 +163,10 @@ class ObjectAdmin(admin.ModelAdmin):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
inlines = [ObjectTagInline, ObjectAttributeInline]
|
inlines = [ObjectTagInline, ObjectAttributeInline]
|
||||||
list_display = ("id", "db_key", "db_account", "db_typeclass_path")
|
list_display = ("id", "db_key", "db_typeclass_path", "db_location", "db_destination", "db_account", "db_date_created")
|
||||||
list_display_links = ("id", "db_key")
|
list_display_links = ("id", "db_key")
|
||||||
ordering = ["db_account", "db_typeclass_path", "id"]
|
ordering = ["-db_date_created", "-id"]
|
||||||
search_fields = ["=id", "^db_key", "db_typeclass_path", "^db_account__db_key"]
|
search_fields = ["=id", "^db_key", "db_typeclass_path", "^db_account__db_key", "^db_location__db_key"]
|
||||||
raw_id_fields = ("db_destination", "db_location", "db_home", "db_account")
|
raw_id_fields = ("db_destination", "db_location", "db_home", "db_account")
|
||||||
readonly_fields = ("serialized_string", "link_button")
|
readonly_fields = ("serialized_string", "link_button")
|
||||||
|
|
||||||
|
|
@ -305,7 +304,7 @@ class ObjectAdmin(admin.ModelAdmin):
|
||||||
f"Added 'puppet:pid({account.id})' lock to {obj}.")
|
f"Added 'puppet:pid({account.id})' lock to {obj}.")
|
||||||
else:
|
else:
|
||||||
self.message_user(request, "Account must be connected for this action "
|
self.message_user(request, "Account must be connected for this action "
|
||||||
"(set Puppeting Account and save this page first).",
|
"(set Puppeting Account and save this page first).",
|
||||||
level=messages.ERROR)
|
level=messages.ERROR)
|
||||||
|
|
||||||
# stay on the same page
|
# stay on the same page
|
||||||
|
|
|
||||||
|
|
@ -90,10 +90,11 @@ class ScriptAdmin(admin.ModelAdmin):
|
||||||
"db_interval",
|
"db_interval",
|
||||||
"db_repeats",
|
"db_repeats",
|
||||||
"db_persistent",
|
"db_persistent",
|
||||||
|
"db_date_created",
|
||||||
)
|
)
|
||||||
list_display_links = ("id", "db_key")
|
list_display_links = ("id", "db_key")
|
||||||
ordering = ["db_obj", "db_typeclass_path"]
|
ordering = ["-db_date_created", "-id"]
|
||||||
search_fields = ["^db_key", "db_typeclass_path"]
|
search_fields = ["=id", "^db_key", "db_typeclass_path"]
|
||||||
readonly_fields = ["serialized_string"]
|
readonly_fields = ["serialized_string"]
|
||||||
form = ScriptForm
|
form = ScriptForm
|
||||||
save_as = True
|
save_as = True
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue