9.如何在修改页面添加自定义的按钮

Villain有一个叫is_unique的字段

  1. class Villain(Entity):
  2. ...
  3. is_unique = models.BooleanField(default=True)

你想在Villain页面添加一个叫“Make Unique”按钮让这个Villian唯一,其他的同名的villian都应该被删除。

你先扩展change_form添加一个按钮

  1. {% extends 'admin/change_form.html' %}
  2. {% block submit_buttons_bottom %}
  3. {{ block.super }}
  4. <div class="submit-row">
  5. <input type="submit" value="Make Unique" name="_make-unique">
  6. </div>
  7. {% endblock %}

然后你可以覆盖response_change并将模板连接到VillainAdmin

  1. @admin.register(Villain)
  2. class VillainAdmin(admin.ModelAdmin, ExportCsvMixin):
  3. ...
  4. change_form_template = "entities/villain_changeform.html"
  5. def response_change(self, request, obj):
  6. if "_make-unique" in request.POST:
  7. matching_names_except_this = self.get_queryset(request).filter(name=obj.name).exclude(pk=obj.id)
  8. matching_names_except_this.delete()
  9. obj.is_unique = True
  10. obj.save()
  11. self.message_user(request, "This villain is now unique")
  12. return HttpResponseRedirect(".")
  13. return super().response_change(request, obj)

你现在的admin页面: 9.如何在修改页面添加自定义的按钮 - 图1