循环视图中的模型对象字段
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 循环
视图模型数组上的 ForEach 循环问题导致 Xcode 编译错误 - SwiftUI