提问者:小点点

django“QuerySet”对象中的反向关系没有属性“name”


我有两个型号,叫car和Producer。 这两个模型之间存在多对一的关系。

class Producer(models.Model):
    name = models.CharField(max_length=30)

    def __str__(self):
        return self.name

class Car(models.Model):
    name = models.CharField(max_length=20)
    producer = models.ForeignKey(Producer, on_delete=models.CASCADE)

    def __str__(self):
        return self.name here

当我试图查询反向关系时。

Producer.objects.filter(car__name='Mini')

然后返回一个queryset对象

<QuerySet [<Producer: BMW>]>

当我尝试将queryset对象分配给一个变量并获取name字段结果时,它给出了错误。

obj1 = Producer.objects.filter(car__name='Mini')
    In [6]: obj1.name                                                                                                                                                                   
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-6-5155cb2773b4> in <module>
----> 1 obj1.name

AttributeError: 'QuerySet' object has no attribute 'name'

这个错误的原因是什么


共2个答案

匿名用户

Queryset是一个对象列表,而不是单个对象。

所以你可以做:

obj1 = Producer.objects.filter(car__name='Mini').first(). # <- get first
In [6]: obj1.name  

或者万一你要处理多个。

for i in obj1:
    print(obj1.name)
    # do your logic

匿名用户

当您使用get()Django返回一个对象并且您可以获取该对象的变量时,例如obj1.name,但是当您使用filter时,Django返回一个queryset,您必须用for迭代查询集:

mini_producers = Producer.objects.filter(car__name='Mini')

for producer in mini_producers:
    print(producer.name)