python - 如何跟踪有多少外键连接到一个对象?

标签 python django

我在数据库中有两个表(我创建的):EntryNation。每次创建新条目时,用户都必须填写与其相关的国家/地区。因此,一个条目有两个字段: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/

相关文章:

python - 使用模板中的表单访问模型字段的属性

django - 将 Django QuerySet 转换为 Pandas Dataframe 并保持列顺序

django - PyCharm:连接到 vagrant Postgres DB 时 SSH Auth 失败

python - 使用 Cartopy 从数据中屏蔽海洋或陆地

python - 使用python将数据插入MYSQL数据库

sql - Django 是否对基本查询(使用 Postgres)进行索引优化?

django - 使用 Django 通过 AWS 发送电子邮件,并通过反向 DNS 设置指向不同的服务器

python - 在 Python 中裁剪和保存 TIFF 文件

python - 获得最小移动以避免方形重叠的算法

python - 设置图例符号不透明度