我在数据库中有两个表(我创建的):Entry
和 Nation
。每次创建新条目时,用户都必须填写与其相关的国家/地区。因此,一个条目有两个字段:Content
[字符字段] 和 Nation
[国家的外键]。问题是,在该网站的主页上,最受欢迎的国家按照其条目数量的顺序显示。不断查找 Entry
表中有多少个外键与每个 Nation
相关似乎效率很低,所以我想知道如何保留计数器。我的意思是,如果我为国家创建一个额外的整数字段,我怎样才能做到每次创建一个条目时,它都会将正确的国家增加 1,并且每次销毁一个条目时,都会减少正确的国家国家 1。
最佳答案
您可以使用post_save
信号,在 save()
方法末尾发送。
首先,将(如您所说)一个 counter = IntegerField(default=0)
添加到您的 Nation
模型中。
然后,每次创建新的条目
时,都会增加该计数器。
from django.db.models.signals import post_save
# Your models ...
def increase_nation_counter(instance, created, **kwargs):
if created: # Just increase counter if it's a new Entry
instance.nation.counter += 1
instance.nation.save()
post_save.connect(increase_nation_counter, sender=Entry)
然后,您可以使用简单的查询对您的Nation
进行排序:
Nation.objects.order_by('-counter')
关于python - 如何跟踪有多少外键连接到一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13557270/