Ví dụ (không phải trường hợp, nhưng chỉ để minh họa) nếu tôi muốn thêm một hành động để thiết lập một trường cụ thể trong các mục đã chọn thành X. Có thể thêm hành động để cho phép X được nhập vào trái ngược với khó được mã hóa?Bạn có thể thêm thông số vào hành động quản trị tùy chỉnh Django không?
Trả lời
Xem: Actions that Provide Intermediate Pages
Bạn không thể làm điều đó ngay từ trang sách thay đổi, nhưng trên trang trung gian của bạn, bạn có thể có một hình thức mà sẽ cho phép người dùng nhập vào một giá trị, và sau đó sử dụng giá trị cho hành động.
Có thể với Django 1.5, mặc dù hơi bị hack một chút. Tôi không chắc chắn với những gì các phiên bản cũ Django nó có thể.
Bạn viết lớp con ModelAdmin của riêng bạn. ModelAdmin có thuộc tính được gọi là action_form
xác định biểu mẫu được hiển thị trước nút Go
trên trang danh sách thay đổi. Bạn có thể viết biểu mẫu của riêng bạn và đặt nó dưới dạng action_form trên lớp con ModelAdmin của bạn.
from django.contrib.admin.helpers import ActionForm
# ActionForm is the default form used by Django
# You can extend this class
class XForm(ActionForm):
x_field = forms.CharField()
class YourModelAdmin(admin.ModelAdmin):
action_form = XForm
Với những thay đổi này, bạn sẽ có CharField, nơi bạn có thể đặt giá trị cho X
.
Và sử dụng x_field
trong chức năng hành động của bạn.
def set_x_on_objects(modeladmin, request, queryset):
for obj in queryset:
obj.something = request.POST['x_field']
# do whatever else you want
class YourModelAdmin(admin.ModelAdmin):
action_form = XForm
actions = [set_x_on_objects]