Django - доступ к измененным полям InlineAdmin в родительской функции save_model () - PullRequest
0 голосов
/ 26 декабря 2018

Приносим свои извинения, если этот вопрос уже был решен ранее.Так как я не смог найти правильного решения для этого, пришлось спросить.Мне нужно выполнить действие (вызов API, сообщающий моим клиентам обновить модели с их конца), когда происходит изменение в полях Inline Admin модели изнутри save_model () родительского администратора.

models.py

class Student(models.Model)
    name = CharField()
    age = DateField()

class Marks(models.Model)
    student = ForeignKey(Student)
    subject = CharField()
    marks = IntegerField()

admin.py

class MarksInline(admin.TabularInline):
    model = Marks
    form = MarksForm
    formset = MarksInlineFormSet

class StudentAdmin(admin.ModelAdmin):
    form = StudentForm
    inlines = [MarksInline, ]

Я могу добиться этого, проверивform.changed_data из StudentAdmin save_model() и для MarksInline моделей MarksInlineFormSet clean().Проблема в том, что мое действие будет вызываться отдельно от каждого из этих методов, что приведет к двум вызовам, хотя все, что мне нужно, - это один вызов для обновления модели Student и Marks в клиентской части.

Моя проблема была бы решена, если бы save_model() из StudentAdmin мог вернуть поля, которые также были изменены с помощью form.changed_data в MarksInline.

Попытался также использовать сигналы post_save, внедрив Field Tracker .Но это также отсылало отдельные post_save сигнальные вызовы функции получателя.

Кто-нибудь знает обходной путь, используя который я могу выяснить измененные поля полей InlineAdmin из родительского метода Admins save_model().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...