Вызывает ли obj.save() в save_model() в admin.ModelAdmin вызов save() в models.Model?
Я переопределил "save()" в классе "Person(models.Model)", как показано ниже:
# "models.py"
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
Затем, я также переопределил "save_model()" в "PersonAdmin(admin.ModelAdmin)" class как показано ниже:
# "admin.py"
from django.contrib import admin
from .models import Person
@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
super().save_model(request, obj, form, change)
Тогда я могу добавить "Стив Джобс" как показано ниже:
Далее, для "save_model()" в "PersonAdmin(admin.ModelAdmin)" class, я заменил "super().save_model(request, obj, form, change)" на "pass" как показано ниже:
# "admin.py"
from django.contrib import admin
from .models import Person
@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
pass
# super().save_model(request, obj, form, change)
Но теперь я не могу добавить "Билл Гейтс" как показано ниже:
Итак, я проверил save_model() на репозитории Django на GitHub. Затем, в "save_model()" в классе ModelAdmin(BaseModelAdmin)", "obj.save()" вызывается, как показано ниже:
# "django/django/contrib/admin/options.py"
# ...
class ModelAdmin(BaseModelAdmin):
# ...
def save_model(self, request, obj, form, change):
"""
Given a model instance save it to the database.
"""
obj.save() # Here
Итак, вызывает ли "obj.save()" вызов "save()" в "Person(models.Model)" классе?
Да "object.save()" вызовет метод этого объекта, который является Person(models.Model). Вы также можете увидеть в коде ModelAdmin enter link description here, где четко указано, что ModelAdmin просто добавляет функциональность, связанную с панелью администратора, к данной Model. А "save_model" - это использование моделей, построенных в методе save, поскольку ModelAdmin не наследует от модели(Person(models.Model)). Более подробную информацию вы можете найти в официальной документации Django введите описание ссылки здесь.