spejstore/storage/admin.py

146 lines
4.0 KiB
Python
Raw Permalink Normal View History

2016-09-29 20:20:10 +00:00
from django import forms
from django.contrib import admin
2017-10-08 16:01:03 +00:00
2023-08-04 15:46:08 +00:00
from .models import Item, ItemImage, Category, StaffProxyModel
from .widgets import PropsSelectWidget
2020-05-14 21:16:53 +00:00
2023-07-11 13:34:35 +00:00
class ModelAdminMixin(object):
2020-05-14 21:16:53 +00:00
def has_add_permission(self, request, obj=None):
return request.user.is_authenticated
2020-05-14 21:16:53 +00:00
has_change_permission = has_add_permission
has_delete_permission = has_add_permission
has_module_permission = has_add_permission
2016-09-29 20:20:10 +00:00
class ItemForm(forms.ModelForm):
name = forms.CharField(widget=forms.TextInput())
wiki_link = forms.CharField(required=False, widget=forms.TextInput())
2016-09-29 20:20:10 +00:00
class Meta:
model = Item
exclude = []
widgets = {
2023-07-11 13:34:35 +00:00
"props": PropsSelectWidget,
}
2016-09-29 20:20:10 +00:00
2018-04-27 20:53:38 +00:00
2020-05-14 21:16:53 +00:00
class ItemImageInline(ModelAdminMixin, admin.TabularInline):
2016-09-29 20:20:10 +00:00
model = ItemImage
extra = 1
2018-04-27 20:53:38 +00:00
class ItemAdmin(ModelAdminMixin, admin.ModelAdmin):
2023-07-11 13:34:35 +00:00
list_display = ("_name",)
list_filter = ("categories",)
2016-09-29 20:20:10 +00:00
form = ItemForm
2023-07-17 21:03:28 +00:00
inlines = [ItemImageInline]
2017-02-28 23:16:10 +00:00
save_on_top = True
2023-08-04 16:02:08 +00:00
autocomplete_fields = [
"parent",
"owner",
"taken_by",
"categories",
]
search_fields = [
"name",
]
def formfield_for_foreignkey(self, db_field, request, **kwargs):
formfield = super().formfield_for_foreignkey(db_field, request, **kwargs)
if db_field.name == "owner":
formfield.queryset = formfield.queryset.order_by("username")
return formfield
2016-09-29 20:20:10 +00:00
2017-02-15 03:01:47 +00:00
def _name(self, obj):
return ("-" * (obj.get_level() or 0)) + "> " + obj.name
2017-02-15 03:01:47 +00:00
def save_model(self, request, obj, form, change):
super(ItemAdmin, self).save_model(request, obj, form, change)
# Store last input parent to use as default on next creation
if obj.parent:
2023-07-11 13:34:35 +00:00
request.session["last-parent"] = str(obj.parent.uuid)
else:
2023-07-11 13:34:35 +00:00
request.session["last-parent"] = str(obj.uuid)
def get_changeform_initial_data(self, request):
data = {
2023-07-11 13:34:35 +00:00
"parent": request.GET.get("parent") or request.session.get("last-parent")
}
data.update(super(ItemAdmin, self).get_changeform_initial_data(request))
return data
class Media:
2023-07-11 13:34:35 +00:00
css = {"all": ("css/admin.css",)}
2016-09-29 20:20:10 +00:00
2017-05-29 13:39:28 +00:00
def response_action(self, request, queryset):
with Item.disabled_tree_trigger():
return super(ItemAdmin, self).response_action(request, queryset)
2018-04-27 20:53:38 +00:00
class NormalModelAdmin(ModelAdminMixin, admin.ModelAdmin):
search_fields = ["name"]
pass
2023-07-11 13:34:35 +00:00
admin.site.site_title = "Hackerspace Storage Admin"
admin.site.site_header = "Hackerspace Storage Admin"
2020-05-11 18:26:59 +00:00
2016-09-29 20:20:10 +00:00
admin.site.register(Item, ItemAdmin)
admin.site.register(Category, NormalModelAdmin)
2018-04-27 22:32:45 +00:00
from django.contrib.auth.models import User
from django.contrib.auth.models import Group
2023-07-11 13:34:35 +00:00
User.add_to_class("get_short_name", User.get_username)
User.add_to_class("get_full_name", User.get_username)
2018-04-28 19:25:08 +00:00
from django.contrib.auth.admin import UserAdmin
class StaffProxyModelAdmin(UserAdmin):
def has_module_permission(self, request):
return request.user.is_superuser
def has_add_permission(self, request, obj=None):
return request.user.is_superuser
2023-08-04 15:26:25 +00:00
def __has_view_permission(self, request, obj=None):
return True
has_view_permission = __has_view_permission
has_change_permission = has_add_permission
has_delete_permission = has_add_permission
has_module_permission = has_add_permission
def get_form(self, request, obj=None, **kwargs):
form = super().get_form(request, obj, **kwargs)
is_superuser = request.user.is_superuser
if not is_superuser:
for f in form.base_fields:
form.base_fields[f].disabled = True
return form
# admin.site.register(StaffProxyModel, StaffProxyModelAdmin)
2018-04-27 22:32:45 +00:00
admin.site.unregister(User)
admin.site.unregister(Group)
2018-10-10 19:18:25 +00:00
from social_django.admin import UserSocialAuth, Nonce, Association
2023-07-11 13:34:35 +00:00
2018-10-10 19:18:25 +00:00
admin.site.unregister(UserSocialAuth)
admin.site.unregister(Nonce)
admin.site.unregister(Association)
admin.site.register(StaffProxyModel, StaffProxyModelAdmin)