Как можно реализовать сохранение данных и переход на новую форму для создания записи в Django админке при нажатии на кнопку "Сохранить и добавить еще", где уже будут заполнены поля с предыдущей модели?
Вот пример моего кода:
```python
@admin.register(models.Location)
class LocationAdmin(admin.ModelAdmin):
list_display = ('id', 'name', 'color', 'priority')
list_per_page = 25
search_fields = ('name', 'color', 'priority')
def save_model(self, request: HttpRequest, obj, form, change) -> None:
if form.data.get('_addanother') == 'Сохранить и добавить еще':
ModelForm = form.__class__
form = ModelForm(initial=obj.__dict__)
super().save_model(request, obj, form, change)
else:
super().save_model(request, obj, form, change)
```
Как можно изменить код, чтобы при нажатии на кнопку "Сохранить и добавить еще" данные сохранялись, а затем происходил переход на новую форму для создания записи со заполненными полями из предыдущей модели?
Для добавления начальных значений для полей формы в админке Django можно использовать атрибут `default` модели. Например, если у вас есть модель `Location` с полем `name` и вы хотите задать начальное значение для него, вы можете изменить вашу модель следующим образом:
```python
from django.db import models
class Location(models.Model):
name = models.CharField(max_length=100, default='Начальное значение')
# остальные поля модели
```
Теперь поле `name` будет иметь начальное значение 'Начальное значение' при создании новой записи.
Чтобы реализовать сохранение данных и переход на новую форму для создания записи в Django админке при нажатии на кнопку "Сохранить и добавить еще", вы можете использовать метод `response_add()` административного класса.
```python
from django.contrib import admin
from django.http import HttpResponseRedirect
@admin.register(models.Location)
class LocationAdmin(admin.ModelAdmin):
list_display = ('id', 'name', 'color', 'priority')
list_per_page = 25
search_fields = ('name', 'color', 'priority')
def response_add(self, request, obj, post_url_continue=None):
if '_addanother' in request.POST:
return HttpResponseRedirect('/admin/myapp/location/add/')
else:
return super().response_add(request, obj, post_url_continue)
```
В этом примере, если пользователь нажимает кнопку "Сохранить и добавить еще", он будет перенаправлен на URL для создания новой записи, а если он нажимает "Сохранить", будет использоваться стандартный метод `response_add()`.
Обратите внимание, что вы должны изменить `'myapp'` и `'location'` в URL-адресе перенаправления под свои модели и их приложения.
def get_form(self, request, obj=None, **kwargs):
form = super(<>, self).get_form(request, obj, **kwargs)
# В этом методе можно вносить изменения в форму, как обычно...
# Например, если есть параметр 'product_id' в GET-запросе, то можно установить начальное значение поля 'delivery_add' равным адресу пользователя
if request.GET and request.GET['product_id']:
product_id = request.GET['product_id']
product = Product.objects.get(id=product_id)
form.base_fields['delivery_add'].initial = request.user.address
return form