##// END OF EJS Templates
Delete global ID when deleting post. Cache model's content XML tag into global ID
Delete global ID when deleting post. Cache model's content XML tag into global ID

File last commit:

r1511:ea51d39c decentral
r1520:ecaafe92 decentral
Show More
admin.py
123 lines | 4.0 KiB | text/x-python | PythonLexer
from django.contrib import admin
from django.utils.translation import ugettext_lazy as _
from django.core.urlresolvers import reverse
from boards.models import Post, Tag, Ban, Thread, Banner, PostImage, KeyPair, GlobalId
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ('id', 'title', 'text', 'poster_ip', 'linked_images')
list_filter = ('pub_time',)
search_fields = ('id', 'title', 'text', 'poster_ip')
exclude = ('referenced_posts', 'refmap')
readonly_fields = ('poster_ip', 'threads', 'thread', 'linked_images',
'attachments', 'uid', 'url', 'pub_time', 'opening')
def ban_poster(self, request, queryset):
bans = 0
for post in queryset:
poster_ip = post.poster_ip
ban, created = Ban.objects.get_or_create(ip=poster_ip)
if created:
bans += 1
self.message_user(request, _('{} posters were banned').format(bans))
def ban_with_hiding(self, request, queryset):
bans = 0
hidden = 0
for post in queryset:
poster_ip = post.poster_ip
ban, created = Ban.objects.get_or_create(ip=poster_ip)
if created:
bans += 1
posts = Post.objects.filter(poster_ip=poster_ip, id__gte=post.id)
hidden += posts.count()
posts.update(hidden=True)
self.message_user(request, _('{} posters were banned, {} messages were hidden').format(bans, hidden))
def linked_images(self, obj: Post):
images = obj.images.all()
image_urls = ['<a href="{}">{}</a>'.format(reverse('admin:%s_%s_change' %(image._meta.app_label, image._meta.model_name), args=[image.id]), image.hash) for image in images]
return ', '.join(image_urls)
linked_images.allow_tags = True
actions = ['ban_poster', 'ban_with_hiding']
@admin.register(Tag)
class TagAdmin(admin.ModelAdmin):
def thread_count(self, obj: Tag) -> int:
return obj.get_thread_count()
def display_children(self, obj: Tag):
return ', '.join([str(child) for child in obj.get_children().all()])
def save_model(self, request, obj, form, change):
super().save_model(request, obj, form, change)
for thread in obj.get_threads().all():
thread.refresh_tags()
list_display = ('name', 'thread_count', 'display_children')
search_fields = ('name',)
@admin.register(Thread)
class ThreadAdmin(admin.ModelAdmin):
def title(self, obj: Thread) -> str:
return obj.get_opening_post().get_title()
def reply_count(self, obj: Thread) -> int:
return obj.get_reply_count()
def ip(self, obj: Thread):
return obj.get_opening_post().poster_ip
def display_tags(self, obj: Thread):
return ', '.join([str(tag) for tag in obj.get_tags().all()])
def op(self, obj: Thread):
return obj.get_opening_post_id()
# Save parent tags when editing tags
def save_related(self, request, form, formsets, change):
super().save_related(request, form, formsets, change)
form.instance.refresh_tags()
list_display = ('id', 'op', 'title', 'reply_count', 'status', 'ip',
'display_tags')
list_filter = ('bump_time', 'status')
search_fields = ('id', 'title')
filter_horizontal = ('tags',)
@admin.register(KeyPair)
class KeyPairAdmin(admin.ModelAdmin):
list_display = ('public_key', 'primary')
list_filter = ('primary',)
search_fields = ('public_key',)
@admin.register(Ban)
class BanAdmin(admin.ModelAdmin):
list_display = ('ip', 'can_read')
list_filter = ('can_read',)
search_fields = ('ip',)
@admin.register(Banner)
class BannerAdmin(admin.ModelAdmin):
list_display = ('title', 'text')
@admin.register(PostImage)
class PostImageAdmin(admin.ModelAdmin):
search_fields = ('alias',)
@admin.register(GlobalId)
class GlobalIdAdmin(admin.ModelAdmin):
def is_linked(self, obj):
return Post.objects.filter(global_id=obj).exists()
list_display = ('__str__', 'is_linked',)