【问题标题】:Looping over a model object fields in a view循环视图中的模型对象字段
【发布时间】:2017-03-28 16:34:12
【问题描述】:

我有一个像下面这样的模型。我想遍历视图内的所有字段以获取相应对象中字段的字段名称和值。

class Company(models.Model):
    name = models.CharField(max_length=1000)
    website = models.CharField(max_length=1000)
    email = models.CharField(max_length=200)
    phone_number = models.CharField(max_length=100)
    city = models.CharField(max_length=1000)

【问题讨论】:

标签: python django view model


【解决方案1】:

我有同样的问题,this answer 帮助了我
这个想法是你可以把一个模型对象变成一个字典,然后遍历这个字典

from django.forms.models import model_to_dict
...
result = Company.objects.get(id=7)
resultDict = model_to_dict(result)
for key, value in resultDict.items():
  print(f'key: {key} - value: {value}')

【讨论】:

    【解决方案2】:

    使用模型_meta API。在这种情况下,您需要 get_fields 方法:

    Company._meta.get_fields()
    

    参考:https://docs.djangoproject.com/en/1.10/ref/models/meta/#retrieving-all-field-instances-of-a-model

    【讨论】:

    • 在这里,我正在寻找对象中的字段名称和该字段的值。
    • 获取所有名称后,您可以检索特定实例的该字段的值,如下所示:getattr(activity_instance, field_name)
    • Company._meta.get_fields() 给出所有字段(类型和名称)的元组。是否可以获取字段名称并将其传递给列表?
    【解决方案3】:

    尝试序列化QuerySet:

    from django.core import serializers
    from .models import YourModel
    
    # inside the view
    ...
    object_list = serializers.serialize("python", YourModel.objects.all())
    
    for object in object_list:
        for field_name, field_value in object['fields'].items():
            print field_name, field_value
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多