#django #django-admin
#джанго #django-администратор
Вопрос:
Я написал действие, которое должно обновлять поле в каждой записи, выбранной пользователем, в соответствии с этим документом.
Проблема в том, что queryset
он всегда пуст, и, таким образом, никаких изменений не происходит.
def SendCommandAction(self, request, queryset):
print(self._Command)
commandStatus = {
'Command':self._Command,
'Fetched':False
}
print(queryset) #output from console: <QuerySet []>
updated = queryset.update(Command_Status = commandStatus,)
self.message_user(request, ngettext(
'%d record was successfully updated.',
'%d records were successfully updated.',
updated,
) % updated, messages.SUCCESS)
После того, как я выберу записи и нажму кнопку «Перейти», появится это сообщение:
0 records were successfully updated.
Комментарии:
1. Вы выбирали элементы (с флажками) перед запуском действия?
2. @WillemVanOnsem Да, я это сделал. На самом деле я бы получил следующее сообщение об ошибке, если бы я этого не сделал: » Элементы должны быть выбраны для того, чтобы выполнять с ними действия. Никакие элементы не были изменены «.
3. @mahsakhazaei вы нашли проблему? Я вижу то же самое поведение.
4. @UmairA. К сожалению, я до сих пор не знаю, в чем проблема. Я думаю, что в итоге я получил список выбранных элементов во внешнем интерфейсе и передал его в представление через ajax, а остальное обработал в этом представлении.
Ответ №1:
У меня возникла аналогичная проблема, и я обнаружил, что этот метод options.response_action
отвечает за обработку действия и получаемого им набора запросов.
В моем случае я использую mongodb, и этот метод response_action
перезаписывает мой набор запросов (метод фильтрует по объектам pks, но для mongodb вам нужно предоставить экземпляры ObjectId для функции filter, а администратор django использует только строки).
if not select_across:
# Perform the action only on the selected objects
queryset = queryset.filter(pk__in=selected)
# `selected` here is a list of strings (and for mongodb should be bson.ObjectId)
# that is the reason the queryset is empty in my case
Я решил эту проблему, создав пользовательский класс queryset для моей модели, и тщательно перезаписал функцию фильтра, чтобы преобразовать список строк в список bson.Идентификаторы объектов только в том случае, если фильтр включает в себя pk.
Я думаю, вам нужно отладить этот метод и выяснить, что происходит в вашем случае.
Удачи! Luis.-