[英]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.