【问题标题】:'QuerySet' object has no attribute 'name' Django'QuerySet' 对象没有属性'name' Django
【发布时间】:2021-08-05 05:14:41
【问题描述】:

所以我有一个get函数

class HorseEquipmentView(APIView):
    lookup_url_kwarg = 'horse'

    def get (self, request, format = None):
        horse = 1     
        if horse != None:
            tab = []
            #queryset = HorseEquipment.objects.raw('SELECT H.horse_id, E.name FROM horse_equipment H JOIN equipment E ON H.equipment_id = E.id WHERE H.horse_id =' + str(horse))
            queryset = HorseEquipment.objects.filter(horse_id=horse).select_related("equipment")
            for i in queryset:
                i.equipment = Equipment.objects.filter(id = 1).name  
            #equipment = HorseEquipment.objects.filter(horse_id=horse).select_related('equipment')
            serializer = HorseEquipmentSerializer(queryset, many = True)
            return Response(serializer.data)
        else:
            return Response(status = status.HTTP_400_BAD_REQUEST)

和我的设备模型:

class Equipment(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(unique=True, max_length=30, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'equipment'

所以它有 id 和 name 属性,但不知何故,它在我的 get 函数上给了我错误,正是在我引用“name”属性的 for 循环中。你能帮我找出问题所在吗?

【问题讨论】:

  • 您需要重新阅读有关objects.filter(...)objects.get(...) 的部分。

标签: django django-models django-rest-framework django-views django-orm


【解决方案1】:

您正在使用.filter(),它将返回QuerySet,而不是模型的实例。对于这种情况,您应该使用.get() 来访问name 属性。

替换:

Equipment.objects.filter(id=1).name 

Equipment.objects.get(id=1).name 

【讨论】:

    猜你喜欢
    • 2020-10-31
    • 1970-01-01
    • 2022-12-10
    • 2017-06-22
    • 2013-05-10
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多