gpt4 book ai didi

python - 如果对象存在则从对象获取属性

转载 作者:行者123 更新时间:2023-11-28 20:04:34 24 4
gpt4 key购买 nike

我经常遇到这种情况,我想知道我是否以正确的方式处理它。

我想从一个对象中获取一个属性,但该对象可能是 None。

some_value = myobject.some_value if myobject else None

如果变量简短且易于/干净地键入,则此方法工作正常。

这变得困惑的地方是长的 django 查询:

some_value = MyModel.objects.filter(...).first().some_value if MyModel.objects.filter(...).first() else None

理论上,我可以将它分成多行:

myobject = MyModel.objects.filter(...).first()
some_value = myobject.some_value if myobject else None

但这对我来说太困惑了。

是否有更清晰/更简洁的方法来完成此操作?

(作为引用,有一个用于 javascript 的 lodash function 做类似的事情)

最佳答案

您可以执行 getattr 并像这样提供默认值

some_value = getattr(myobject, 'some_value', None)

此外,如果它只是模型相关的问题,您可以编写自定义 ModelManager,它将像这样工作

from django.db import models

class GetValueManager(models.Manager):
def get_value(self, field_name, filter_kwargs=None):
filter_kwargs = filter_kwargs or {}
obj = self.filter(**filter_kwargs).first()
return getattr(obj, field_name, None)

class MyModel(models.Model):
field1 = models.CharField()

objects = GetValueManager()

在代码中:

some_value = Mymodel.objects.get_value('some_value', filter_kwargs={'field1': 'foo'}

https://docs.djangoproject.com/en/1.9/topics/db/managers/#adding-extra-manager-methods

关于python - 如果对象存在则从对象获取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36314869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com