【问题标题】:Django number of objects added todayDjango 今天添加的对象数量
【发布时间】:2014-07-15 20:34:22
【问题描述】:

我有一个这样的models.py:

class Baslik(models.Model):
    user = models.ForeignKey(User, null=True, blank=True)
    title = models.CharField(max_length=50)
    slug = models.SlugField()
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)
    active = models.BooleanField(default=True)

    def __unicode__(self):
        return str(self.title)


    def get_absolute_url(self, ):
        return reverse('baslik', args=[self.slug])

    class Meta:
         ordering = ['updated']



class Entry(models.Model):
    user = models.ForeignKey(User, null=True, blank=True)
    baslik = models.ForeignKey(Baslik, null=True, blank=True)
    icerik = models.TextField(max_length=50000)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)

    def __unicode__(self):
        return str(self.icerik)

我需要显示在当前日期为每个 baslik 添加的条目数,这是它的 ForeignKey。我用这个views.py:

def hepsi(request):
    basliklar = Baslik.objects.filter(active=True).order_by('-updated')  
    rast = Entry.objects.order_by('?')[0]
    gunlist = []
    zaman1 = date.today()
    zaman2 = str(zaman1).split(" ")
    zamangun = zaman2[0]

    for i in basliklar:
        entryler = i.entry_set.all()
        sayi2 = entryler.count()

        if sayi2>0:
            ent1 = entryler.latest('id')
            ent2 = ent1.updated
            ent3 = str(ent2).split(" ")
            entgun = ent3[0]

            if entgun == zamangun:
                gunlist.append(i)

        if sayi2==0:
            baslik1 = i.updated
            baslik2 = str(baslik1).split(" ")
            baslikgun = baslik2[0]

            if baslikgun==zamangun:
                gunlist.append(i)

    cta = {'basliklar': basliklar, 'entryler': entryler, 'ent1': ent1, 'ent2': ent2, 'entgun': entgun, 'zamangun': zamangun, 'gunlist': gunlist, 'rast': rast}

    return render(request, "base.html", cta)

我需要今天在 for 循环中 base.html 的这部分添加的条目数:

{% for i in gunlist %}

 {{ i }} {{ # of entries added today }}

{% endfor %}

我该如何解决这个问题?任何意见都会有所帮助。谢谢。

【问题讨论】:

    标签: python django for-loop


    【解决方案1】:

    这是views.py:

    all_basliks=Baslik.objects.filter(active=True).order_by('-updated')
    
    for baslik in all_basliks:
     number=baslik.Entry_set.filter(timestamp=localtime.date()).count()
     gunlist[baslik]=number
    
    return render(request, 'gunlist': gunlist)
    

    在base.html中:

    {% for i in gunlist %}
     {{ i }} {{ gunlist_i }}
    {% endfor %}
    

    【讨论】:

    • 它说:AttributeError at / 'Baslik' object has no attribute 'Entry_set'
    • 我将 'Entry' 更改为 'entry' 并没有引发任何错误,但它仍然没有达到我想要的效果。
    • 你是对的。它应该是“entry_set”。 baslik.entry_set.all() 应该返回所有条目,引用给定的 baslik。 filter(timestamp=localtime.date()) 应该只过滤掉那些今天创建的条目。 count() 返回此类条目的计数。
    【解决方案2】:

    这个版本的带有 OrderedDict 的 hepsi 函数运行良好。

    def hepsi(request):
        basliklar = Baslik.objects.filter(active=True).order_by('-updated') 
        rast = Entry.objects.order_by('?')[0]
        gunlist = OrderedDict([])
        zaman1 = date.today()
        zaman2 = str(zaman1).split(" ")
        zamangun = zaman2[0]
    
        for i in basliklar:
            entryler = i.entry_set.all()
            sayi2 = entryler.count()
    
            if sayi2>0:
                j=0
                for enty in entryler:
                    entyy1 = enty.updated
                    entyy2 = str(entyy1).split(" ")
                    entyygun = entyy2[0]
                    if entyygun == zamangun:
                        j += 1
                gunlist.update({i:j})
    
            if sayi2==0:
                baslik1 = i.updated
                baslik2 = str(baslik1).split(" ")
                baslikgun = baslik2[0]
    
                if baslikgun==zamangun:
                    gunlist.update({i:'0'})
    
        cta = {'basliklar': basliklar, 'entryler': entryler, 'entyygun': entyygun, 'zamangun': zamangun, 'gunlist': gunlist.iteritems(), 'rast': rast}
    
        return render(request, "base.html", cta)
    

    【讨论】:

      猜你喜欢
      • 2012-08-21
      • 2021-12-11
      • 2020-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-18
      相关资源
      最近更新 更多