У меня есть две связанные (через отношение externalKey) модели и создана модель администратора для родителя со встроенными строками. В определенном случае мне нужно получить все связанные модели и использовать их для обновления 1 конкретного поля для родительской модели. Каков эффективный способ сделать это?
Мои модели:
class ParentModel(BaseModel):
text = models.CharField() # This is generated from inline children's data
...
class ChildModel(BaseModel):
parent = models.ForeignKey(ParentModel, on_delete=models.RESTRICT)
...
class ChildModelInline(TabularInline):
model = ChildModel
class ParentModelAdmin(admin.ModelAdmin):
inlines = [ChildModelInline]
...
Я хочу что-то похожее на это:
class ParentModelAdmin(admin.ModelAdmin):
inlines = [ChildModelInline]
...
def save_model(self, request, obj, form, change):
inline_objects = <get_all_inline_objects>
obj.text = <generate_text(inline_objects)>
super(ParentModelAdmin, self).save_model(request, obj, form, change)
Метод save_model
выполняется до сохранения связанных объектов. Это очевидно, поскольку связанные объекты должны ссылаться на первичный ключ модели.
Вероятно, вы ищете метод save_related
.
class ParentModelAdmin(admin.ModelAdmin):
def save_related(self, request, form, formsets, change):
super(ParentModelAdmin, self).save_related(self, request, form, formsets, change):
# form.instance stores the saved object
form.instance.text = ...
form.instance.save()