Как я могу запросить ввод данных пользователем с помощью действия в администраторе django?

В моем коде я пишу действие для группировки, я хотел бы спросить пользователя, сколько людей они хотят в группе, а затем ответить окном предупреждения, которое говорит что-то вроде того, что у вас есть 4 группы, на основе пользовательского ввода . Как мне сделать это в админке django, как мне создать какое-то всплывающее окно, которое запрашивает количество людей, которых они хотели бы поместить в группу? (Я пытаюсь добиться этого с помощью действия)

admin.py:

 Def howmany (modeladmin, request, queryset):
      people = queryset.count()
      amount_per = [the number that the user inputs]
      Amount_of_groups = people/amount_per

person user3806832    schedule 10.08.2014    source источник


Ответы (2)


admin.py Что-то вроде:

Class MyAdmin(admin.ModelAdmin):

    def howmany (modeladmin, request, queryset):
        people = queryset.count()
        amount_per = [the number that the user inputs]
        Amount_of_groups = people/amount_per

        if 'apply' in request.POST:
            form = AmountPerForm(request.POST)

            if form.is_valid():
                amount_per = form.cleaned_data['amount_per']
                self.message_user(request, u'You selected - %s' % amount_per)
            return HttpResponseRedirect(request.get_full_path())
        else:
            form = AmountPerForm()

        return render(request, 'admin/amount_per_form.html', {
            'items': queryset.order_by('pk'),
            'form': form,
            'title': u'Your title'
            })

Файл "admin/amount_per_form.html" содержит что-то вроде:

 {% extends 'admin/base_site.html' %}

 {% block content %}
 <form action="" method="post">
    {% csrf_token %}
    <input type="hidden" name="action" value="assign_new_manager" />
    {{ form }}
    <p>Apply for:</p>
    <ul>{{ items|unordered_list }}</ul>
    <input type="submit" name="apply" value="Apply" />
 </form>
 {% endblock %}
person mrvol    schedule 11.08.2014
comment
Помните, что при повторении списка элементов в форме вам необходимо включить скрытое поле _selected_action. Без этого при отправке вы не будете привлечены к действию, просто вернетесь в список администраторов, и ваше действие не будет успешным (с использованием Django версии 2.2). Пример: ‹input type=hidden name=_selected_action value={{ item.pk }}/›.... Я просто потратил час, используя это решение ???? - person David Hopkins; 04.06.2020
comment
Большой! Спасибо за совет, столкнулся с точно такой же проблемой! - person aarcas; 08.06.2020

Более упрощенный и лучший подход я нашел здесь:

Вам просто нужно создать форму действия, подобную этой.

from django.contrib.admin.helpers import ActionForm
from django import forms


class XForm(ActionForm):
    x_field = forms.ModelChoiceField(queryset=Status.objects.all(), required=False)

Теперь определите эту XForm в вашем admin.py.

class ConsignmentAdmin(admin.ModelAdmin):

    action_form = XForm
    actions = ['change_status']

    def change_status(modeladmin, request, queryset):
        print(request.POST['x_field'])
        for obj in queryset:
            print(obj)
    change_status.short_description = "Change status according to the field"
person ARKhan    schedule 29.08.2020