Django 1.6:如何打印用户上传的对象数量?

时间:2014-03-09 22:16:54

标签: python django

我希望获得用户上传到数据库中的对象数量。例如:

假设我有一个名为“Link”的模型(它将带有标题和描述的网址添加到我的models.py中:

class Link(models.Model):
    user = models.ForeignKey(User)
    title = models.CharField(max_length=200)
    link = models.URLField(max_length=200)
    description = models.TextField()

形式为:

class UrlForm(ModelForm):
    class Meta:
        model = Link

它的观点:

def linkurl(request):
    form = UrlForm() 
    if request.method == 'POST': 
        form = UrlForm(data=request.POST, instance=Link()) 
        if form.is_valid(): 
            form.instance.user = request.user 
            form.save()
            return redirect("home")
        else:
            form = UrlForm() 
    return render(request, "addurl.html", {'form': form})

因此,知道用户可以在我的应用中添加网址,我希望打印用户上传到我的应用中的网址数量。这有可能吗? 提前谢谢你。

2 个答案:

答案 0 :(得分:2)

使用filtercount

# change request.user to user id or user instance you need
user_links_count = Link.objects.filter(user=request.user).count()

答案 1 :(得分:1)

有多种方法可以实现这一目标。

  1. 使用查询并将其传递到模板中: ndpu已经在这里指出: https://stackoverflow.com/a/22288960/659900
  2. user_links_count = Link.objects.filter(user=request.user).count()
    render(request, "addurl.html", {'form': form, linkscount: user_links_count})
    
    1. 使用可用于直接在表单上访问模型的模型属性,而无需触摸视图中的render方法。 将以下方法添加到您的链接模型:(警告:未经测试!)
    2. @property
      def user_links_count(self):
      try:
          return self.objects.filter(user=self.user).count()
      except:
          return 0 #or any error message you want
      

      现在,在您的模板中,您可以直接通过您使用的表单访问您的链接模型。假设您没有使用空模型:

      {{ form._meta.model.user_links_count }}
      

      但是我建议使用ndpu的解决方案来实现一次性解决方案。如果您经常需要此功能,请考虑对模型进行增强