gpt4 book ai didi

python - 如何在 Django 中添加所有外键关系?

转载 作者:太空宇宙 更新时间:2023-11-03 12:53:30 25 4
gpt4 key购买 nike

我有这两个模型:

class Country(models.Model):
Name = models.CharField(max_length=100)
Population = models.CharField(max_length=100)
Language = models.IntegerField()
Total_persons= models.IntegerField()

class Person(models.Model):
Country = models.ForeignKey(Country, on_delete=models.CASCADE, null=True)
name = models.CharField(max_length=100)
contact = models.IntegerField()

国家我有美国、加拿大、墨西哥、西类牙、法国......在 Person 中,我有超过 1000 个人。

如何使 Total_persons 随着该国家/地区 Persons 总数的增加而增加。

最佳答案

无需将 Total_persons 设为单独的字段,您可以删除该字段并简单地获取属于 Country 实例的 Person 的数量国家:

country.person_set.count()

或者如果你喜欢更友好的名字,你可以给 Person 中的 Country 外键一个 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 实例被创建(当它的pkNone),并且覆盖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()

关于python - 如何在 Django 中添加所有外键关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52359461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com