zoo/zoo/zoo_data/admin.py

73 lines
2.1 KiB
Python

from django.contrib import admin
from .models import Transaction, Entity, Relation, Log
from .widgets import JSONEditor
class TransactionAdmin(admin.ModelAdmin):
date_hierarchy = 'created'
list_display = ['id', 'created']
class LeftRelationInlineAdmin(admin.TabularInline):
fk_name = 'left'
fields = ['right', 'schema', 'meta', 'content']
raw_id_fields = ['left', 'right']
model = Relation
extra = 0
class RightRelationInlineAdmin(admin.TabularInline):
fk_name = 'right'
fields = ['left', 'schema', 'meta', 'content']
raw_id_fields = ['left', 'right']
model = Relation
extra = 0
class LogInlineAdmin(admin.TabularInline):
model = Log
fields = ['timestamp', 'transaction', 'content', 'url']
readonly_fields = ['timestamp', 'transaction']
extra = 0
can_delete = False
class DataAdmin(admin.ModelAdmin):
list_display = ['id', 'schema', 'name', 'created', 'created_ts',
'modified', 'modified_ts', 'deleted', 'deleted_ts']
list_filter = ['schema']
list_select_related = ('schema',)
raw_id_fields = ['modified', 'created', 'deleted']
def name(self, instance):
return instance.schema.make_caption(instance)
def created_ts(self, instance):
return instance.created.created
def modified_ts(self, instance):
return instance.modified and instance.modified.created
def deleted_ts(self, instance):
return instance.deleted and instance.deleted.created
# def get_form(self, request, obj=None, **kwargs):
# if obj and obj.schema:
# kwargs['widgets'] = {
# 'content': JSONEditor(schema=obj.schema.schema),
# }
# return super(DataAdmin, self).get_form(request, obj=obj, **kwargs)
class EntityAdmin(DataAdmin):
inlines = [LeftRelationInlineAdmin, RightRelationInlineAdmin, LogInlineAdmin]
class RelationAdmin(DataAdmin):
raw_id_fields = DataAdmin.raw_id_fields + ['left', 'right']
admin.site.register(Transaction, TransactionAdmin)
admin.site.register(Entity, EntityAdmin)
admin.site.register(Relation, RelationAdmin)