如何获取object.filter()django中的所有字段

Posted

技术标签:

【中文标题】如何获取object.filter()django中的所有字段【英文标题】:how to get all fields in a object.filter() django 【发布时间】:2017-01-24 20:31:03 【问题描述】:

我正在尝试显示所有字段,但我只获得了我的一些字段。我不确定为什么这是我的观点

我的观点导入

def switchingowners(request):
ownersofcar = Owner.objects.filter(CarID = request.user['CarID'])
for owner in ownersofcar :
            addingOwner = models.Owner(CarID=form['CarID'],Owner_Date=ownerofcar['Owner_Date']
                )

好的,我的模型看起来像

class Owner(models.Model):

carID = models.ForeignKey(Car)    
Owner_Entry_Number = models.IntegerField()
Owner_Date = models.DateField('Proprietor start date', null=True, blank=True)

Owner_Last_Name = models.CharField(max_length=50, null=True, blank=True)
Owner_First_Name = models.CharField(max_length=50, null=True, blank=True)
Owner_Middle_Initial = models.CharField(max_length=6, null=True, blank=True)
Owner_Address = models.CharField(max_length=80, null=True, blank=True)

我的数据库后端包含所有字段的信息

ownersofcar = Owner.objects.filter(CarID = request.user['CarID'])

它告诉我 TypeError 我看到的过滤对象是

self    

[<Owner: 1248612 MALCOLM  DESRIVIERES >, <Owner: 1248612  JULIETTA  REMY >, <Owner: 1248B612 THERESA  DESIR >, <Owner: 1248B612 ALEXANDER JEAN>]

其他领域到底在哪里?我没有看到任何关于确定我想要接收哪些字段的文档,因为我想要它们!

每个字段都有重要信息 我基本上把所有的名字从一辆车换到另一辆车/多辆车

但过滤器不会返回所有字段

【问题讨论】:

其他字段都有,为什么你认为没有?您可以像访问任何其他属性一样访问它们。 但是,您应该显示代码,它会给出 TypeError。 这只是字符串表示。如果您想查看其中的所有字段,只需覆盖 __str__ 方法并返回您想要的表示。 它告诉我类型错误并指定它正在寻找的字段!它会打印查询集附带的字段,并且缺少一些字段 我也做了一个 logger.error(ownerofcar) 但它仍然没有向我显示所有字段 【参考方案1】:

我假设您收到类型错误是因为您正在执行request.user['CarId']。除非您使用自定义用户类,否则这是无效的。

所有字段都在那里,您看到的只是结果的字符串表示形式,由Owner__str____unicode__ 方法定义。

更改此方法或打印您想要的字段,例如:

for owner in ownersofcar:
    logger.error(owner.Owner_Address)

【讨论】:

是的,当我这样做时,我得到 'QuerySet' 对象没有属性 'Owner_Address' 那么你有一个 QuerySet,而不是单个对象。简单来说,QuerySet 是一个对象列表,没有属性。我建议查看有关进行查询的 Django 文档:docs.djangoproject.com/en/1.10/topics/db/queries【参考方案2】:

感谢你们的一个建议,我意识到字段丢失时的错误,我的同事重写了 str() 方法并且没有注意这一点 并且覆盖正是它所需要的。不包括其他字段

谢谢大家

【讨论】:

除了 Daniel 所说的关于 TypeError 的内容之外,您似乎仍然错过了其他人的观点。田野都在那里。 str 表示就是用户定义的模型表示。表示不是模型。这些字段在那里并且可以访问 - 如果你这样做,使用你的代码示例,并且 ownerofcar 是查询集,你会看到,例如ownerofcar[0].Owner_Last_Name 将为您提供该字段。

以上是关于如何获取object.filter()django中的所有字段的主要内容,如果未能解决你的问题,请参考以下文章

Django,检测object.filter是不是返回0个对象

Django filter中contains 用法

models.Book.object.get()与models.Book.object.filter()区别

javascript Object.filter

Django - 如何简单地获取域名? [复制]

如何在 django 中同时获取两个模型