Вместо того чтобы делать Total_persons
отдельным полем, вы можете удалить это поле и просто получить число Person
s, принадлежащих Country
экземпляру country
с:
country.person_set.count()
Или, если вы предпочитаете более дружелюбное имя, вы можете указать Country
внешний ключ в Person
a related_name
:
class Person(models.Model):
Country = models.ForeignKey(Country, related_name='persons', on_delete=models.CASCADE, null=True)
так что вы можете получить тот же счет с:
country.persons.count()
Или, если вы все еще предпочитаете сделать Total_persons
отдельным полем, вы можете переопределить метод Person.save()
для синхронизации его страны при создании экземпляра Person
(когда его pk
равен None
) и переопределите метод Person.delete()
для синхронизации при удалении экземпляра Person
:
class Person(models.Model):
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
if not self.pk:
self.Country.Total_persons = self.Country.person_set.count()
self.Country.save()
def delete(self):
country = self.Country
super().delete()
country.Total_persons = country.person_set.count()
country.save()