Переопределите save_model на Django InlineModelAdmin

Попробованный к upvote ответу H Craig, что необходимо использовать повышение:: присвойтесь, но у меня нет представителя: (

я встретился с подобной техникой в первой статье, которую я когда-либо читал Andrei Alexandrescu в Пользовательский Журнал C/C++, Vol 16, № 9, сентябрь 1998, стр 73-74 (имейте полную цитату, потому что это находится в комментариях моей реализации его кода, который я использовал с тех пор).

Шаблоны являются Вашим другом.

17
задан Trey Piepmeier 13 November 2009 в 21:52
поделиться

4 ответа

Сохраняется ли другая модель Пользователь? В этом случае вы можете использовать сигнал post_save , чтобы добавить эту информацию в набор встроенной модели.

0
ответ дан 30 November 2019 в 13:40
поделиться

Пробовали ли вы реализовать настраиваемую проверку в админке, как описано в документации ? Переопределение функции clean_user () в форме модели может помочь вам.

На ум приходит еще один, более сложный вариант. Вы можете переопределить шаблон администратора, который отображает форму изменения. Переопределение формы изменения позволит вам создать настраиваемый тег шаблона, который передает зарегистрированного пользователя в ModelForm. Затем вы можете написать пользовательскую функцию init в форме модели, которая автоматически устанавливает пользователя. Этот ответ дает хороший пример того, как это сделать, как и ссылка на b-list, на которую вы ссылаетесь в вопросе.

0
ответ дан 30 November 2019 в 13:40
поделиться

Выполняется только save_model для редактируемой модели, вместо этого для обновления инкрементированных данных необходимо использовать сигнал post_save.

(На самом деле это не дубликат, но по существу на тот же самый вопрос дается ответ в Формирует ли встроенная модель сигналы emmit post_save? (django))

2
ответ дан 30 November 2019 в 13:40
поделиться

У меня была аналогичная проблема с пользовательским полем, которое я пытался заполнить во встроенной модели. В моем случае в родительской модели также было определено пользовательское поле, поэтому я переопределил save в дочерней модели следующим образом:

class inline_model:
    parent = models.ForeignKey(parent_model)
    modified_by = models.ForeignKey(User,editable=False) 
    def save(self,*args,**kwargs):
        self.modified_by = self.parent.modified_by
        super(inline_model,self).save(*args,**kwargs)

Пользовательское поле было изначально автоматически заполнено в родительской модели путем переопределения save_model в ModelAdmin для родительской модели и присвоение

obj.modified_by = request.user

Имейте в виду, что если у вас также есть отдельная страница администратора для дочерней модели, вам понадобится какой-то другой механизм для синхронизации родительского и дочернего полей modified_by (например, вы можете переопределить save_model в дочернем ModelAdmin и обновите / сохраните поле modified_by в родительском перед вызовом save в дочернем).

Я не нашел хорошего способа справиться с этим, если пользователь не находится в родительской модели. Я не знаю, как получить request.user с помощью сигналов (например, post_save ), но, возможно, кто-то еще может предоставить более подробную информацию об этом.

1
ответ дан 30 November 2019 в 13:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: