如何获取Django模型字段对象的值

HuL*_*iCa 9 python django django-models

我使用了一个模型字段对象field_object = MyModel._meta.get_field(field_name)。如何获得字段对象的值(内容)?

awe*_*oon 14

用途value_from_object

field_name = 'name'
obj = MyModel.objects.first()
field_object = MyModel._meta.get_field(field_name)
field_value = field_object.value_from_object(obj)
Run Code Online (Sandbox Code Playgroud)

等同于getattr

field_name = 'name'
obj = MyModel.objects.first()
field_object = MyModel._meta.get_field(field_name)
field_value = getattr(obj, field_object.attname)
Run Code Online (Sandbox Code Playgroud)

或者,如果您知道字段名称并且只想使用字段名称获取值,则无需首先检索字段对象:

field_name = 'name'
obj = MyModel.objects.first()
field_value = getattr(obj, field_name)
Run Code Online (Sandbox Code Playgroud)

  • 否-如果您不知道字段名称。您应该改用`getattr(MyModel.objects.get(id = id),field)`(假设`field`为`str`)。OP询问如何使用字段对象检索值。这在这里可能*过大,但只有OP知道实际的任务。此答案显示了如何通过字段对象从模型实例中获取字段值-就像OP希望的那样 (2认同)
  • 我要感谢大家花时间回答我的问题。我已经尝试了你所有的建议,我总是得到一个对象 `<django.db.models.query_utils.DeferredAttribute object at 0x10e534748>`,我正在寻找的是一个实际值,比如“墨西哥”(我正在使用模型**国家**的字段**名称**)。 (2认同)

JPG*_*JPG 5

假设您有一个模型,

class SampleModel(models.Model):
    name = models.CharField(max_length=120)
Run Code Online (Sandbox Code Playgroud)

然后,您将获得name模型实例的field 的值,

sample_instance = SampleModel.objects.get(id=1)
value_of_name = sample_instance.name
Run Code Online (Sandbox Code Playgroud)