【发布时间】:2016-12-16 00:53:23
【问题描述】:
我是 Django 新手,我正在努力学习。我最终陷入了一种我无法弄清楚最好的前进方式的情况。
来自models.py的sn-p:
class ProjectMeta(models.Model):
project = models.ForeignKey(Project)
architect = models.CharField(max_length=200)
landscape = models.CharField(max_length=100, blank=True)
engineer = models.CharField(max_length=200, blank=True)
client = models.CharField(max_length=100)
consultant = models.CharField(max_length=100, blank=True)
size = models.DecimalField(max_digits=5, decimal_places=2, blank=True)
location = models.CharField(max_length=200)
date = models.DateField()
STATUS = (
('CP', 'Competition'),
('UC', 'Under construction'),
('CO', 'Completed'),
)
status = models.CharField(max_length=2, choices=STATUS, default=1)
这是视图:
class ProjectDetailView(DetailView):
model = Project
def get_context_data(self, **kwargs):
context = super(ProjectDetailView, self).get_context_data(**kwargs)
context['projectmeta_list'] = ProjectMeta.objects.all()
return context
但如果我想在模板中输出 ProjectMeta,我可以遍历 projectmeta_list。
{% for metadata in projectmeta_list %}
<p>Architect: {{ metadata.architect }}</p>
{% endfor %}
但这需要大量重复自己,而且我不会工作。因为假设架构师字段为空,所以我会将Archiect: 打印到页面上。有没有一种将模型转换为字典或列表的内置方法,所以我可以迭代它并只打印出页面上不为空的字段?
我一直在研究 get_fields(),这行得通吗? https://docs.djangoproject.com/en/1.10/ref/models/meta/#retrieving-all-field-instances-of-a-model
我在 shell 中尝试了这个,抛出了 AttributeError:
>>> from projects.models import *
>>> Project._projectmeta.get_fields()
【问题讨论】: