def deactivate(modeladmin: admin.ModelAdmin, request: WSGIRequest, queryset: QuerySet): queryset.update(active=False) model = queryset.model model.objects.disconnect(model.signal, model.receiver, model) modeladmin.message_user(request, _('Total deactivated: %s' % queryset.count()))
def unlink_from_gsuite_action(modeladmin: ModelAdmin, request: HttpRequest, queryset: QuerySet) -> None: """ Unlink Users from GSuite """ count, _ = GoogleAssociation.objects.filter( user__alumni__in=queryset).delete() modeladmin.message_user( request, 'Unlinked {} user(s) from their GSuite Account(s). '.format(count))
def unpublish_page(modeladmin: admin.ModelAdmin, request: HttpRequest, queryset: QuerySet): pages_updated = queryset.update(published=False) if pages_updated == 1: message = '1 page was' else: message = '{:d} page were'.format(pages_updated) modeladmin.message_user(request, '{:s} successfully marked as published.'.format(message))
def disprove_tutorial_comment_action(modeladmin: ModelAdmin, request: HttpRequest, queryset: QuerySet): # After update update_queryset becomes empty because of applied exclusion # thus, we store update item primary keys in update_item_pks t use later update_queryset = queryset.exclude( confirm_status=ConfirmStatusChoices.DISPROVED).filter(is_active=True) update_item_pks = [comment.pk for comment in update_queryset] updated_count = update_queryset.update( confirm_status=ConfirmStatusChoices.DISPROVED) # Execute new query to get updated objects for notification send_mail_queryset = queryset.filter( pk__in=update_item_pks).select_related("user", "tutorial") # Send notifications confirm_disprove_notifier_result = TutorialCommentConfirmDisproveNotifier( request, send_mail_queryset).notify() modeladmin.message_user(request, f"{updated_count} مورد با موفقیت رد شد", messages.SUCCESS) message_user_email_results(request, modeladmin, confirm_disprove_notifier_result)
def make_active_brother(modeladmin, request, queryset): group = Group.objects.get(name='Active Brother') for user in queryset: user.groups.add(group) ModelAdmin.message_user(self=modeladmin, request=request, message='Selected users were added to the ' 'Active Brother group')
def delete_expired_coupons(modeladmin, request, queryset): count = 0 for coupon in queryset: expiration_date = coupon.ruleset.validity.expiration_date if timezone.now() >= expiration_date: coupon.delete() count += 1 ModelAdmin.message_user(modeladmin, request, "{0} Expired coupons deleted!".format(count))
def swap(model_admin: admin.ModelAdmin, request, queryset: QuerySet): if queryset.count() != 2: model_admin.message_user(request, _('Swapped can be only directly two matches.'), level=messages.ERROR) return first, second = queryset # type: Match, Match first.match_term, second.match_term = second.match_term, first.match_term first.save(update_fields=['match_term', ]) second.save(update_fields=['match_term', ]) model_admin.message_user(request, _('Successfully swapped.'), level=messages.SUCCESS)
def reset_coupon_usage(modeladmin, request, queryset): to_update = [] for coupon_user in queryset: if coupon_user.times_used > 0: coupon_user.times_used = 0 to_update.append(coupon_user) CouponUser.objects.bulk_update(to_update, fields=['times_used'], batch_size=500) ModelAdmin.message_user(modeladmin, request, "Coupons reseted!")
def _show_message(model_admin: ModelAdmin, request: HttpRequest, n: int, message: str, error: str) -> None: if n == 0: model_admin.message_user(request, error, messages.ERROR) else: model_admin.message_user( request, message % { "count": n, "items": model_ngettext(model_admin.opts, n) }, messages.SUCCESS, )
def merge(modeladmin, request, queryset): main = queryset[0] tail = queryset[1:] related = main._meta.get_all_related_objects() valnames = dict() for r in related: valnames.setdefault(r.related_model, []).append(r.field.name) manyrelated = main._meta.get_all_related_many_to_many_objects() manyvalnames = dict() for r in manyrelated: manyvalnames.setdefault(r.related_model, []).append(r.field.name) for place in tail: for model, field_names in valnames.items(): for field_name in field_names: model.objects.filter(**{field_name: place}).update(**{field_name: main}) for model, field_names in manyvalnames.items(): for field_name in field_names: for manytomany in model.objects.filter(**{field_name: place}): manyfield = getattr(manytomany, field_name) # gets attribute from string manyfield.remove(place) manyfield.add(main) place.delete() # merge all TeamsOnTournament on same Tournament for this Team modelname = modeladmin.__class__.__name__ if modelname is 'TeamAdmin': tours = [] team = Team.objects.get(name=main) totm = TeamOnTournament.objects.filter(team=team) for tour in totm: if tour.tournament not in tours: tours.append(tour.tournament) for tour in tours: totm = TeamOnTournament.objects.filter(team=team).filter(tournament=tour) if len(totm) > 1: for instance in totm[1:]: for player in instance.players.all(): totm[0].players.add(player) instance.delete() ModelAdmin.message_user(modeladmin, request, 'sloučeno, v objektu můžete zvolit výsledné jméno')
def link_to_gsuite_action(modeladmin: ModelAdmin, request: HttpRequest, queryset: QuerySet) -> None: """ Link to GSuite links users to a GSuite Account """ profiles = get_user_model().objects.filter(alumni__in=queryset) link_gsuite_users(profiles, False, on_message=lambda x: modeladmin.message_user(request, x))
def message_user_email_results( request: HttpRequest, modeladmin: ModelAdmin, notifications_result: NotificationResult, ): if notifications_result.success: successful_notifications_msg = ( f"{notifications_result.success} اطلاعیه با موفقیت ارسال شد") modeladmin.message_user(request, successful_notifications_msg, messages.SUCCESS) if notifications_result.failed: failed_notifications_msg = ( f"ارسال {notifications_result.failed} اطلاعیه با خطا مواجه شد") modeladmin.message_user(request, failed_notifications_msg, messages.ERROR)
def disprove_tutorial_action(modeladmin: ModelAdmin, request: HttpRequest, queryset: QuerySet): update_queryset = queryset.exclude( confirm_status=ConfirmStatusChoices.DISPROVED).filter(is_active=True) update_item_pks = [tutorial.pk for tutorial in update_queryset] updated = update_queryset.update( confirm_status=ConfirmStatusChoices.DISPROVED) # Execute new query to get updated objects for notification send_mail_queryset = queryset.filter( pk__in=update_item_pks).select_related("author") # Send notifications notifier = TutorialConfirmDisproveNotifier(request, send_mail_queryset) notify_result = notifier.notify() modeladmin.message_user(request, f"{updated} مورد با موفقیت رد شد", messages.SUCCESS) message_user_email_results(request, modeladmin, notify_result)
def confirm_tutorial_comment_action( modeladmin: ModelAdmin, request: HttpRequest, queryset: QuerySet[TutorialComment], ): # After update update_queryset becomes empty because of applied exclusion # then we store update item primary keys in update_item_pks t use later update_queryset = queryset.exclude( confirm_status=ConfirmStatusChoices.CONFIRMED).filter(is_active=True) update_item_pks = [comment.pk for comment in update_queryset] updated_count = update_queryset.update( confirm_status=ConfirmStatusChoices.CONFIRMED) # Execute new query to get updated objects for notification send_mail_queryset = queryset.filter( pk__in=update_item_pks).select_related("user", "tutorial", "parent_comment", "parent_comment__user") # Send notifications confirm_disprove_notifier_result = TutorialCommentConfirmDisproveNotifier( request, send_mail_queryset).notify() reply_notifier_result = TutorialCommentReplyNotifier( request, send_mail_queryset).notify() tutorial_author_new_comment_notifier_result = ( TutorialAuthorNewConfirmedCommentNotifier(request, send_mail_queryset).notify()) emails_result = (confirm_disprove_notifier_result + reply_notifier_result + tutorial_author_new_comment_notifier_result) # Send messages confirm_msg = f"{updated_count} مورد با موفقیت تایید شد" modeladmin.message_user(request, confirm_msg, messages.SUCCESS) message_user_email_results(request, modeladmin, emails_result)
def delete_statistics(modeladmin: admin.ModelAdmin, request: HttpRequest, queryset: QuerySet): for l in queryset: HitModel.objects.filter(for_link=l).delete() modeladmin.message_user(request, 'Statistics deleted')
def reset_coupon_usage(modeladmin, request, queryset): for coupon_user in queryset: coupon_user.times_used = 0 coupon_user.save() ModelAdmin.message_user(modeladmin, request, "Coupons reseted!")
def move_to_rejected(modeladmin: admin.ModelAdmin, request: HttpRequest, queryset: models.QuerySet): queryset.update(validation=Request.VALIDATION_REJECTED) modeladmin.message_user(request, _('Objects were updated successfully'))