gpt4 book ai didi

mysql - 迭代包含多个实例的实例字段?

转载 作者:行者123 更新时间:2023-11-29 22:14:17 25 4
gpt4 key购买 nike

这是我第一次使用 django,我在理解数据如何存储方面遇到了一些问题,所以我无法真正按照我想要的方式使用它。我做了很多研究,但没有找到任何相关的问题,可能是因为我没有正确的关键字。

在我的应用程序模型中,我创建了一个 WebPage 和 Count 类:

class Count(models.Model):
date = models.DateField(default=date.today)
count = models.IntegerField(default=0)

class WebPage(models.Model):
link = models.CharField(max_length=60)
id = models.AutoField(primary_key=True)
clicks = models.IntegerField(default=0)
stats = models.ForeignKey(Count)

然后我创建了一个包含多个 Count 对象的 WebPage 对象,我想创建一个方法来检索 count 的总和实例。

def get_clicks(self):
self.clicks=0
for object in self.stats:
self.clicks+=object.count

return str(self.clicks)

但我收到错误 'Count' object is not iterable 这是逻辑,因为我将 self.stats 定义为单个 Count 对象。我告诉自己,如果 Count 实例 未存储在 self.stats 中,它们可以存储为“全局”Count 实例,因此我迭代了对象实例 for self._meta.fields 中的对象,但缺少多个 Count 实例:

statistics.WebPage.link
statistics.WebPage.id
statistics.WebPage.clicks
statistics.WebPage.stats

而且我认为迭代“全局”Count 对象不是一个选项,因为我不知道哪个 Count 实例 属于哪个 WebPage.

self.stats Count 实例隐藏在哪里?感谢您的帮助!

(我使用的是 django 1.7)

最佳答案

问题是你的外键是错误的。定义 FK 的模型是一对多关系的“多”方。也就是说,按照您的方式,每个计数都有许多网页,而我认为您想要相反的方式。

然后您可以通过聚合一次性将附加到您网页的计数相加:

from django.db.models import Sum

total_clicks=my_web_page.count_set.aggregate(Sum('count'))

或者,获取整个网页查询集的点击:​​

my_web_page_queryset.annotate(clicks=Sum('count__count'))

关于mysql - 迭代包含多个实例的实例字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31343425/

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