将初始值传递给使用TinyMCE小部件的表单的CharField时,“ CharField”对象没有属性“ is_hidden”

时间:2019-04-01 17:35:23

标签: django python-3.x tinymce django-tinymce

我正在建立一个网站,用户可以在其中创建带有样式化演讲文本的“演讲”。创建演讲时在填写lecture_text字段时应用的TinyMCE插件有助于简化样式。创建讲座可以正常工作,但是我希望此样式化的文本已经位于讲座更新表单的讲座文本区域中。据我了解,我可以使用CharField参数设置TinyMCE initial的默认内容。现在是我的代码:

editLecture HTML将课程ID传递到editLecture视图

...
<form method="post" action="{% url 'openvlab:editLecture' lecture_id %}">
    {% csrf_token %}
    {{ lecture_form.as_p }}
    <script src="https://cloud.tinymce.com/5/tinymce.min.js?apiKey=re1omq7fkhbmtyijhb3xvx4cfhyl3op33zggwlqkmbt5swvp"></script>
    <script>tinymce.init({ selector:'textarea' });</script>
    <button type="submit">Save changes</button>
</form>

editLecture视图将讲座ID传递到讲座更新表单

def editLecture(request,id_string):
...
    lecture_form = LectureUpdateForm(lecture_id=id_string)
...

讲座更新表

class LectureUpdateForm(forms.ModelForm):
    def __init__(self,*args,**kwargs):
        lecture_id=kwargs.pop("lecture_id")
        lecture = Lecture.objects.get(id__exact=lecture_id)
        super(LectureUpdateForm, self).__init__(*args,**kwargs)
        self.fields['lecture_text'].widget = forms.CharField(
                 widget=TinyMCEWidget(
                     attrs={'required': False, 'cols': 30, 'rows': 10},
                     ),  
                 initial=lecture.lecture_text # this is where I try to define the initial content of the editor
                 )

    class Meta:
        model = Lecture
        fields = ['lecture_title', 'lecture_description', 'lecture_text']

但是,当尝试访问讲座编辑页面时,出现AttributeError:'CharField'对象没有属性'is_hidden'。 (如果您需要更详细的回溯,请告诉我,我会提供的。)

我是Django的新手,所以如果我错过了明显的内容或者我的代码未遵循约定,我深表歉意。据我所知,此错误在我在此站点上看到的任何其他问题中都没有解决。

1 个答案:

答案 0 :(得分:2)

您正在将窗口小部件设置为Field对象,该对象本身具有窗口小部件。不要那样做。

self.fields['lecture_text'] = forms.CharField(...)
#                          ^

但是,这不是任何一种方法。从视图初始化表单时,您应该传递instance属性,这样就完全不需要弄乱初始数据了。

lecture = Lecture.objects.get(id=id_string)
lecture_form = LectureUpdateForm(instance=lecture)