@@ -64,7 +64,7 @@ class Message(models.Model):
)
def __str__(self) -> str:
- return f'Сообщение {self.pk} от {self.content_object.user}'
+ return f'Сообщение {self.pk}'
class Meta:
verbose_name = 'Сообщение'
@@ -1,36 +1,55 @@
from django.contrib import admin
+from django.urls import reverse
+from django.utils.html import format_html
from messages.models import MessageError, Message
+from tools.chats.models import Chat
+from tools.media.models import Gallery
@admin.register(Message)
class MessageAdmin(admin.ModelAdmin):
- readonly_fields = (
+ list_per_page = 20
+ readonly_fields = ('uid', 'created_at', 'content_object_link')
+ fields = (
'uid',
'created_at',
+ 'content_object_link',
'content',
'file',
'from_public_api',
'is_sent',
'info'
)
- exclude = (
- 'elapsed_time',
- 'from_model',
- 'is_deleted',
- 'is_favourite',
- 'is_shared',
- 'content_type',
- 'object_id',
- )
+ raw_id_fields = ('content_type',)
+
+ @admin.display(description="Связанный объект")
+ def content_object_link(self, obj):
+ if c_obj := obj.content_object:
+ url = reverse(f'admin:{c_obj._meta.app_label}_{c_obj._meta.model_name}_change', args=[c_obj.pk])
+ return format_html('{}', url, str(c_obj))
+ return '-'
@admin.register(MessageError)
class MessageErrorAdmin(admin.ModelAdmin):
+ list_per_page = 20
readonly_fields = ('detail', 'stacktrace')
- list_display = ('message', 'short_detail')
+ list_display = ('pk', 'message_link', 'short_detail')
search_fields = ('detail', 'stacktrace',)
+ raw_id_fields = ('message',)
+
+ @admin.display(description='Сообщение')
+ def message_link(self, obj: MessageError):
+ if msg_id := obj.message_id:
+ url = reverse('admin:msgs_message_change', args=[msg_id])
+ return format_html('{}', url, f'Сообщение {str(msg_id)[:8]}...')
+ return '-'
@admin.display(description='Подробности')
def short_detail(self, obj: MessageError):
return obj.detail[:50]
+
+ def get_queryset(self, request):
+ queryset = super().get_queryset(request)
+ return queryset.select_related('message')