Django Migration Изменить унаследованное значение по умолчанию
У меня есть класс модели в Django Parent
с подклассом Child
. У Parent есть поле boolean foo
, которое по умолчанию равно True
, которое унаследовал Child. Я хотел бы перенести класс Child так, чтобы
- All new Child objects have a default of False for the foo field
- All existing Child objects have the foo field set to False
Как я могу достичь этого в Django?
Иногда самые простые решения - лучшие решения.
- Вы можете переопределить поле foo в своей дочерней модели:
models.py
class Parent(models.Model):
...
foo = models.BooleanField(default=True)
class Child(Parent):
...
foo = models.BooleanField(default=False)
- Для существующих дочерних экземпляров можно написать небольшой сценарий для их обновления. Обычно я создаю функцию представления и запускаю ее при посещении связанного 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'})