循环视图中的模型对象字段

Posted

技术标签:

【中文标题】循环视图中的模型对象字段【英文标题】: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)

【问题讨论】:

Iterate over model instance field names and values in template的可能重复 该问题与模板有关。在这里,我正在寻找在视图中循环使用@wpercy 它回答了同样的问题。 【参考方案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

【讨论】:

以上是关于循环视图中的模型对象字段的主要内容,如果未能解决你的问题,请参考以下文章

带有模型和视图包的视图中的 C# MVC foreach 循环

Rails STI 和视图重用

与 Django 通用视图中的 pk 不同的 url 路径

视图模型数组上的 ForEach 循环问题导致 Xcode 编译错误 - SwiftUI

使用模型驱动,在action中总是直接返回input视图,而用属性驱动就没事

如何将我在视图中获得的一些信息保存到模型中的一个字段中 - django