Django Migration Изменить унаследованное значение по умолчанию

У меня есть класс модели в Django Parent с подклассом Child. У Parent есть поле boolean foo, которое по умолчанию равно True, которое унаследовал Child. Я хотел бы перенести класс Child так, чтобы

  1. All new Child objects have a default of False for the foo field
  2. All existing Child objects have the foo field set to False

Как я могу достичь этого в Django?

Иногда самые простые решения - лучшие решения.

  1. Вы можете переопределить поле foo в своей дочерней модели:

models.py

class Parent(models.Model):
    ...
    foo = models.BooleanField(default=True)

class Child(Parent):
    ...
    foo = models.BooleanField(default=False)
  1. Для существующих дочерних экземпляров можно написать небольшой сценарий для их обновления. Обычно я создаю функцию представления и запускаю ее при посещении связанного url (но есть много способов сделать это). Что-то вроде:

views.py

def update_children_foo_field(request):

    for child in Child.models.objects.filter(foo=True):
        child.foo = False
        child.save()

    return JsonResponse({'message' : 'Complete'})
Вернуться на верх