Администратор Django - как сохранить inlines?
Мне нужно переопределить метод сохранения inlines в админке. При сохранении фотографий мне нужно добавить идентификатор пользователя в колонку БД. Я не могу сделать это в модели, потому что там нет данных запроса. Как я могу сделать это в админке, чтобы как-то получить nad set user id?
2 ответа
Решение
Я считаю, что метод save_formset в ModelAdmin - это то, что вы должны использовать:
class ArticleAdmin(admin.ModelAdmin):
def save_formset(self, request, form, formset, change):
instances = formset.save(commit=False)
for instance in instances:
instance.user = request.user
instance.save()
formset.save_m2m()
Я относительно новичок в django (1.8) и использую вышеуказанное переопределение:
def save_formset(self, request, form, formset, change):
instances = formset.save(commit=False) # gets instance from memory and add to it before saving it
for obj in formset.deleted_objects:
obj.delete()
for instance in instances:
for form in formset: # cleaned_data is only available on the form, so you have to iterate over formset
instance.modified_by = request.user
instance.created_by = request.user
instance.lowercase_enum_value_en = form.cleaned_data['enum_value_en'].lower()
instance.save()
formset.save_m2m()
т.е. добавление к нему перед сохранением экземпляра и формы, однако, когда пользователь вводит 2 строки, он всегда сохраняет последние cleaned_data['enum_value_en'].