Лучший способ заставить что-то произойти, когда модель сохраняется, чтобы использовать сигнал. Документация Django хорошо описывает, что такое сигналы и как их использовать: http://docs.djangoproject.com/en/dev/topics/signals/
Я не уверен, почему вам нужно сделать это поле в модели, хотя. Базы данных очень хороши для подсчета строк, поэтому вы можете добавить модельный метод для подсчета автомобилей, который будет использовать очень быстрый запрос COUNT ().
class Manufacturer(models.Model):
name = models.CharField()
def car_count(self):
return Car.objects.filter(maker=self).count()
class Car(models.Model):
maker = ForeignKey(Manufacturer)
В свете требований, добавленных вашим комментарием, вы вернулись к обновлению поля в модели производителя при каждом сохранении автомобиля. Я все еще рекомендовал бы использовать метод count (), чтобы убедиться, что поле car_count является точным. Таким образом, ваш обработчик сигнала может выглядеть примерно так:
def update_car_count(sender, **kwargs):
instance = kwargs['instance']
manufacturer = instance.maker
manufacturer.car_count = Car.objects.filter(maker=self).count()
manufacturer.save()
Тогда вы бы подключили его к сигналам post_save и post_delete модели Car.
post_save.connect(update_car_count, sender=Car)
post_delete.connect(update_car_count, sender=Car)