Пользовательская кнопка на странице Django Admin, которая при нажатии изменяет поле модели на True
У меня есть пример модели в моем приложении Django App:
class CustomerInformation(models.Model):
# CustomerInformation Schema
name=models.CharField(max_length=200, verbose_name="Name",default="Default Name")
login_url=models.URLField(max_length=200, verbose_name="Login URL",default="")
is_test=models.BooleanField(default=False,verbose_name="Test")
Мне нужно создать кнопку на странице Django Admin для каждой записи модели (которая у меня есть) с надписью "Test Integration", примерно так: [Скриншот страницы администратора
Теперь, когда я нажимаю на кнопку, значение 'is_test' для этой конкретной модели CustomerInformation должно быть True. Пока что мне не удалось этого сделать. Вот что я пробовал до сих пор, благодаря статье в блоге Хаки БенитаБлог здесь:
# admin.py
class CustomerAdmin(admin.ModelAdmin):
list_display = (
'name',
'username',
'account_actions'
)
def get_urls(self):
urls = super().get_urls()
custom_urls = [
url(
r'^(?P<account_id>.+)/test_integration/$',
self.admin_site.admin_view(self.test_integration),
name='test-integration',
)
]
return custom_urls + urls
def test_integration(self, request, account_id, *args, **kwargs):
return self.process_action(
request=request,
account_id=account_id
)
def process_action(self,request,account_id):
pass
def account_actions(self, obj):
return format_html(
'<a class="button" href={}>Test Integration</a>',
reverse('admin:test-integration', args=[obj.pk]),
)
account_actions.short_description = 'Account Actions'
account_actions.allow_tags = True
Я понимаю, что мне нужно что-то сделать с методами process_action и test_integration в этом классе, чтобы выполнить то, что я хочу сделать, но как новичок в Django, я немного запутался. Есть предложения?
Огромное спасибо!!!
в вашей функции process_action сделайте setattr(self, 'is_test_result', True)
затем переопределите get_form так
def get_form(self, *arg, **kwargs):
form = super().get_form(*arg, **kwargs)
if arg[1] and hasattr(self, 'is_test_result'):
if self.is_test_result is not None:
arg[1].is_test = self.is_test_result
self.is_test_result = None
return form
в arg[1], это ваш шаблон администратора, вы можете сделать arg[1].save()
или позволить пользователю нажать обычную кнопку Сохранить или Сохранить и продолжить внизу справа