2010-10-31 40 views
2

我最近开始在Django中编写代码,所以也许我的问题有点奇怪。 最近我需要将模型中的CharField字段渲染为html中的简单静态文本,但我发现它似乎并非如此简单,因为我能想到,或者我做错了什么......如何将CharField转换为Django中的静态文本?

我有这样的模式:

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) 

它Form类是:

class TagForm(ModelForm): 
    category = ChoiceField(choices=Tag.CATEGORIES) 

    class Meta: 
     model = Tag 

在视图中创建该formset多以单独的形式Tag对象与提供TagForm CLA SS每个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

将字段呈现为只读状态(因此浏览器拒绝修改数据)可能就足够了,请参阅this question

+0

嗨马丁,谢谢你的回答。是的,我之前尝试过这种解决方案,但实际上这种方式编辑框已禁用,但在文本周围仍可见。我的目标是彻底删除这个编辑框,并离开那里只是纯文本,而不是它,但这一个我不知道如何实现... – surry 2010-10-31 16:50:40

0

如果您绝对只想渲染文本,您需要定义一个自定义小部件,然后将表单字段映射到此小部件。在小部件的render()方法中,只输出字段值。

0

如果你不想输入字段,你为什么要使用Django的窗体?

你也可以给模板添加一个对象列表,并以你喜欢的方式渲染对象字段。

2

在窗体的元类,添加以下删除领域

exclude = ('name', 'description'), 

然后用

{{ tagform.instance.name }} 
{{ tagform.instance.description }} 

也会显示在你的模板中的数值,选择参数应该传递给类别模型领域;这样你就不需要明确定义表单中的字段。

相关问题