[英]Django: I'm stuck with the admin register when dealing with foreign keys and many to many fields inside that foreign key model
[英]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
,則可以使用內置的default
或default_if_none
模板過濾器顯示默認值。
{% for metadata in projectmeta_list %}
<p>Architect: {{ metadata.architect|default:"-" }}</p>
{% endfor %}
檢查此以獲取更多詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.