簡體   English   中英

Django處理模型字段

[英]Django dealing with a model fields

我是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 %}

但是,這需要大量重復我自己,而且我不會工作。 因為可以說Architect字段為空,所以我將Archiect:打印到頁面上。 是否有將模型轉換為字典或列表的內置方法,所以我可以對其進行迭代,僅打印出頁面中不為空的字段?

我一直在看get_fields(),行得通嗎? https://docs.djangoproject.com/en/1.10/ref/models/meta/#retrieving-all-field-instances-of-a-model

我在外殼中嘗試過,然后拋出AttributeError:

>>> from projects.models import *
>>> Project._projectmeta.get_fields()

您應該嘗試將<p>Architect: {{ metadata.architect }}</p>包裹在有條件的{% if metadata.architect != '' %}或達到該效果的某些條件中。

嘗試使用另一個ProjectMeta模型。 看一看。

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

並且此查詢應該工作。 myproject.projectmeta_set.filter(name="status")

如果為None或為empty string ,則可以使用內置的defaultdefault_if_none模板過濾器顯示默認值。

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

檢查以獲取更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM