djbot / users /admin.py
azils3's picture
Upload 63 files
16bfc87 verified
from django.contrib import admin
from django.http import HttpResponseRedirect
from django.shortcuts import render
from dtb.settings import DEBUG
from users.models import Location
from users.models import User
from users.forms import BroadcastForm
from users.tasks import broadcast_message
from tgbot.handlers.broadcast_message.utils import send_one_message
@admin.register(User)
class UserAdmin(admin.ModelAdmin):
list_display = [
'user_id', 'username', 'first_name', 'last_name',
'language_code', 'deep_link',
'created_at', 'updated_at', "is_blocked_bot",
]
list_filter = ["is_blocked_bot", ]
search_fields = ('username', 'user_id')
actions = ['broadcast']
def broadcast(self, request, queryset):
""" Select users via check mark in django-admin panel, then select "Broadcast" to send message"""
user_ids = queryset.values_list('user_id', flat=True).distinct().iterator()
if 'apply' in request.POST:
broadcast_message_text = request.POST["broadcast_text"]
if DEBUG: # for test / debug purposes - run in same thread
for user_id in user_ids:
send_one_message(
user_id=user_id,
text=broadcast_message_text,
)
self.message_user(request, f"Just broadcasted to {len(queryset)} users")
else:
broadcast_message.delay(text=broadcast_message_text, user_ids=list(user_ids))
self.message_user(request, f"Broadcasting of {len(queryset)} messages has been started")
return HttpResponseRedirect(request.get_full_path())
else:
form = BroadcastForm(initial={'_selected_action': user_ids})
return render(
request, "admin/broadcast_message.html", {'form': form, 'title': u'Broadcast message'}
)
@admin.register(Location)
class LocationAdmin(admin.ModelAdmin):
list_display = ['id', 'user_id', 'created_at']