这是我第一次使用django,我遇到了一些问题,无法理解数据的存储方式,因此我无法按照自己的意愿使用它。我做了很多研究但是我找不到任何相关的问题,可能是因为我没有合适的关键词。
在我的app模型中,我创建了一个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)
然后我创建了一个包含多个WebPage
个对象的Count
对象,我想创建一个方法来检索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 instances
没有存储在self.stats
中,那么它们可以存储为“全局”计数实例,因此我遍历对象实例for object in self._meta.fields
但是多个Count
实例丢失:
statistics.WebPage.link
statistics.WebPage.id
statistics.WebPage.clicks
statistics.WebPage.stats
而且我认为迭代“全局”Count
个对象不是一个选项,因为我无法知道哪个Count instance
属于哪个WebPage
。
隐藏了self.stats
Count
个实例的位置?谢谢你的帮助!
(我正在使用django 1.7)
答案 0 :(得分:0)
web_page = Webpage.objects.get(pk=1)
def get_clicks(web_page):
return web_page.contact_set.count()
如果你有一个网页,这将有效。如果您获得了一组网页,则可以遍历它们并为每个网页调用get_clicks。
答案 1 :(得分:0)
问题是你的ForeignKey是错误的方式。定义FK的模型是"很多"一对多关系的一面。也就是说,你拥有它的方式,每个Count都有很多WebPages,而我认为你想要反过来。
然后,您可以通过聚合将一页附加到您的网页的计数加起来:
List<string> customerNames = (from c in customerNamesByIDs
orderby c.Key
select c.Value).ToList();
或者,为了获得整个网页查询集的点击次数:
from django.db.models import Sum
total_clicks=my_web_page.count_set.aggregate(Sum('count'))