Django处理模型字段

时间:2016-12-15 16:17:00

标签: python django model

我是Django的新手,我正在努力学习。我最终陷入了无法弄清楚最佳前进方向的情况。

来自models.py的

片段:

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()

3 个答案:

答案 0 :(得分:0)

您应该尝试将条件<p>Architect: {{ metadata.architect }}</p>或某些条件中的{% if metadata.architect != '' %}文章包裹起来。

答案 1 :(得分:0)

尝试使用其他ProjectMeta模型。看一下这个。

class ProjectMeta(models.Model):
    project = models.ForeignKey(Project)
    name = models.CharField(max_length=50)
    value = models.TextField()

此查询应该有效。 myproject.projectmeta_set.filter(name="status")

答案 2 :(得分:0)

如果是defaultdefault_if_none,您可以使用内置的Noneempty string模板过滤器来显示默认值。

{% for metadata in projectmeta_list %}
<p>Architect: {{ metadata.architect|default:"-" }}</p>
{% endfor %}

查看this了解详情。