Объект CharField не имеет атрибута is_hidden при передаче начального значения в CharField формы, который использует виджет TinyMCE - PullRequest
0 голосов
/ 01 апреля 2019

Я создаю сайт, на котором пользователи могут создавать «лекции», которые имеют стилизованный текст лекции. Стиль облегчается с помощью плагина TinyMCE, применяемого при заполнении поля lecture_text при создании лекции. Создание лекции работает хорошо, но я бы хотел, чтобы этот стилизованный текст уже находился в области текста лекции в форме обновления лекции. Насколько я понимаю, я могу установить содержимое по умолчанию TinyMCE CharField с аргументом initial. Вот мой код прямо сейчас:

editLecture HTML передает идентификатор лекции в представление 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 передает идентификатор лекции в форму обновления лекции

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 Ответ

2 голосов
/ 01 апреля 2019

Вы устанавливаете виджет на объект Field, который сам имеет виджет.Не делай этого.

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

Тем не менее, это не способ сделать это.Вы должны передавать атрибут instance при инициализации формы из представления, тогда вам вообще не нужно возиться с исходными данными.

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