В настоящее время у вас есть путь для книжного магазина изменить что-то вроде:
/admin/<app_name>/bookstore/<pk>/change/
Я бы посоветовал вам сохранить эту конфигурацию URL и создать URL для смены статуса, например:
/admin/<app_name>/bookstore/<pk>/statuschange/
Предполагая, что StatusChangeForm
:
class StatusChangeForm(forms.ModelForm):
class Meta:
model = models.StatusChange
fields = ['user', 'bookstore', 'status',]
Таким образом, чтобы сделать это, вам необходимо настроить get_urls()
для принятия pk
из bookstore
:
def get_urls(self):
urls = super().get_urls()
my_urls = [path('<int:pk>/statuschange/', self.change_store_status, name='statuschange'), ]
return my_urls + urls
и измените ваш change_store_status()
для получения этого pk
и используйте его при получении bookstore
instance:
def change_store_status(self, request, pk):
obj = self.model.objects.get(pk=pk)
store_id = getattr(obj, 'id')
store_status = getattr(obj, 'status')
form = forms.StatusChangeForm(request.POST or None,
initial={'user': request.user, 'bookstore': store_id, 'status': store_status}
)
if request.method == 'POST':
if form.is_valid():
form.save()
payload = {"form": form}
return render(request, "admin/change_status.html", payload)
Также вы должны указать pk
в шаблоне изменения в книжном магазине, чтобы направить пользователя на исправление формы, например:
{% url 'admin:statuschange' pk=original.pk %}
.