from django.contrib import admin from otree.models import Participant from .models import Player # Импорт из текущего приложения @admin.action(description="Разрешить продолжить") def allow_proceed(modeladmin, request, queryset): for participant in queryset: player = participant.player_set.first() if player: # Устанавливаем флаг в participant.vars, так как в модели нет поля allowed_to_proceed player.participant.vars['allowed_to_proceed'] = True player.participant.save() class CustomParticipantAdmin(admin.ModelAdmin): list_display = ['code', 'label', '_waiting_status', '_allow_proceed'] actions = [allow_proceed] # Убираем list_filter, так как поля нет в модели # list_filter = ['player__waiting_for_room'] def _waiting_status(self, obj): # Получаем информацию из participant.vars или возвращаем False return obj.vars.get('waiting_for_room', False) _waiting_status.boolean = True _waiting_status.short_description = "Ожидает" def _allow_proceed(self, obj): # Получаем информацию из participant.vars return obj.vars.get('allowed_to_proceed', False) _allow_proceed.boolean = True _allow_proceed.short_description = "Разрешено" # Регистрируем админку admin.site.unregister(Participant) admin.site.register(Participant, CustomParticipantAdmin)