我最近开始在Django编码,所以也许我的问题有点奇怪。
最近我需要将模型中的CharField
字段渲染成html中的简单静态文本,但我发现在这种情况下我觉得它并不是那么简单,或者我做错了...
我有这个型号:
class Tag(models.Model):
CATEGORIES = (
(0, 'category0'),
(1, 'category1'),
(2, 'category2'),
(3, 'category3'),
(4, 'category4'),
(5, 'category5'))
name = models.CharField(max_length=20)
description = models.CharField(max_length=100, blank=True)
category = models.IntegerField(default=0)
user = models.ForeignKey(User)
表单类是:
class TagForm(ModelForm):
category = ChoiceField(choices=Tag.CATEGORIES)
class Meta:
model = Tag
在视图中我使用单个表单中的多个Tag
对象创建表单集,并为其中的每个TagForm
对象提供Tag
类:
TagsFormSet = modelformset_factory(Tag,exclude=('user'),form=TagForm,extra=0)
form = TagsFormSet(queryset=all_tags)
在模板中我有:
{{ form.management_form }}
{% for tagform in form.forms %}
{{ tagform }}
<hr>
{% endfor %}
但是这种方式在html中,模型的“名称”和“描述”字段总是呈现为输入文本字段。我想将它们放在html中就像普通的静态文本一样没有任何东西(在那个html中,我只需要显示它们)。这种情况有没有快速解决方案?
答案 0 :(得分:2)
在表单的元类中,添加以下内容以删除字段
exclude = ('name', 'description'),
然后使用
显示模板中的值{{ tagform.instance.name }}
{{ tagform.instance.description }}
此外,choices参数应传递给类别模型字段;这样你就不需要在表单中明确定义字段了。
答案 1 :(得分:0)
将字段呈现为只读(因此浏览器拒绝修改数据)可能就足够了,请参阅this question。
答案 2 :(得分:0)
如果您只想渲染文本,则需要定义自定义窗口小部件,然后将窗体域映射到此窗口小部件。在小部件的render()方法中,只输出字段值。
答案 3 :(得分:0)
如果您不想要输入字段,为什么要使用Django的表单?
您也可以只为模板提供一个对象列表,并以您喜欢的方式呈现对象字段。