【问题标题】:Count the number of rows in a Django database : AttributeError计算 Django 数据库中的行数:AttributeError
【发布时间】:2018-03-27 11:02:59
【问题描述】:

我有 Django 模型创建的数据库,其中 idRecruteur 是表 Offre 的字段。

我需要计算 idRecruteur = 1 的行数。

这是我的“Offre”表代码:

@python_2_unicode_compatible
class Offre(models.Model):          
    titre = models.CharField(max_length=100)
    dateAjout = models.DateField(auto_now=False, auto_now_add=False)
    nature = models.CharField(max_length=50)
    duree = models.CharField(max_length=50)
    niveau = models.CharField(max_length=50)
    description = models.CharField(max_length=50)
    salaire = models.FloatField(null=True, blank=True)
    idRecruteur = models.ForeignKey(Recruteur, related_name="Offre", on_delete=models.CASCADE)
    def __str__(self):
        return "Offre: {}".format(self.title)

这是我的查询集:

class OffresparEntrepriseViewSet(ModelViewSet):
    queryset = Offre.objects.filter(idRecruteur=1).count()
    serializer_class = OffreSerializer

我收到错误“AttributeError: 'int' object has no attribute 'model'”

任何想法我做错了什么?

【问题讨论】:

  • idRecruteur 是外键,所以尝试将查询集更改为:queryset = Offre.objects.filter(idRecruteur_id=1).count()

标签: django django-rest-viewsets


【解决方案1】:

ViewSet 的queryset 属性应该是QuerySet 对象,但count() 返回整数。您需要使用queryset = Offre.objects.filter(idRecruteur=1) 作为视图集查询集,并将计数功能移至另一个级别。例如使用list_route:

class OffresparEntrepriseViewSet(ModelViewSet):
    queryset = Offre.objects.filter(idRecruteur=1)
    serializer_class = OffreSerializer

    @list_route()   
    def count(self, request):
        count = self.queryset.count()
        return Response({'count': count})

现在您可以通过访问viewset_url/count url 来获得计数。

【讨论】:

    猜你喜欢
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多