我有两个型号,叫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'
这个错误的原因是什么
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)