Сохранять объект сразу при добавлении через админку?
Столкнулся с задачей: нужно сохранять объект модели сразу после после того как пользователь перейдет на страницу /add/ в админке. То есть чтобы у него уже существовал primary key (коммитить в базу не критично).
Грубо говоря мне нужны object_id и content_type_id, которые в стандартной реализации доступны только при «редактировании» объекта, а не при его добавлении.
Пытался сделать через сигнал post_init, но по не ведомой причине он создает несколько объектов, а не один.
from django.forms import ModelForm
from django.forms.util import ErrorList
class MyModelForm(ModelForm):
def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
initial=None, error_class=ErrorList, label_suffix=':',
empty_permitted=False, instance=None):
opts = self._meta
if instance is None:
if opts.model is None:
raise ValueError('ModelForm has no model class specified.')
instance = opts.model()
instance.save()
super(MyModelForm, self).__init__(data, files, auto_id, prefix,
initial, error_class, label_suffix,
empty_permitted, instance)
Все круто, НО он создает ее в огромных количествах: так как этот init срабатывает повсеместно. К примеру, у меня создается три экземпляра если просто добавить сущность и нажать «сохранить» :) думаю их будет 4 если нажать «сохранить и продолжить редактирование». Эту тему курил все ночь, ничего лучше пошаговой системы создания не пришло в голову, но заказчика это не устраивает :\
Есть еще мысль переписать стандартные add_view, которые просто будет создавать сущность и редиректить, так как если бы нажать на «сохранить и продолжить редактирование», но пока курю код…
Да, так все и есть. Просто даже логически на это смотреть, то __init__ сработает даже при редактировании сущности, то есть мы редактируем одну и тут же создали другую…