Виджеты в формах django не работают… Что мне делать?

#python #django

#python #django

Вопрос:

Без виджетов форма работает корректно. Это должно быть простое решение без вызова super.init. В документации все именно так, как я написал здесь…

Мой views.py:

 class ForumForm(ModelForm):
    class Meta:
        model = Forum
        fields = ['publisher', 'topic', 'text', 'date']

        widgets = {
            'publisher': TextInput(attrs={'class': 'form-control'}),
            'topic': TextInput(attrs={'class': 'form-control'}),
            'text': Textarea(attrs={'class': 'form-control'}),
            'date': DateTimeInput(attrs={'class': 'form-control'})
        }
 

Мой model.py:

 class Forum(models.Model):
    publisher = models.CharField('Публикатор', max_length=50, default='Anonymous')
    topic = models.CharField('Название', max_length=50)
    text = models.TextField('Текст')
    date = models.DateField(default=timezone.now)
    comment = models.CharField('Комментарий', max_length=100, default='Комментарий')
    # slug = models.SlugField(max_length=200, unique=True, default='default')

    class Meta:
        verbose_name = 'Пост'
        verbose_name_plural = 'Посты'

    def __str__(self):
        return self.topic
 

Мой шаблон:

 {% extends 'main/layout.html' %}

{% block title %}New form{% endblock %}

{% block content %}
    <form method="post">
        <div class="form-group">
            {% csrf_token %}
            {{ form.as_p }}
            <button type="submit" class="btn btn-info">Send</button>
        </div>
    </form>
{% endblock %}
 

В HTML-файле просто отображается имя издателя: ‘Публикатор’

Комментарии:

1. publisher является ForeignKey ли? Можете ли вы поделиться своей моделью?

2. ваши виджеты выглядят нормально. что вы подразумеваете под неправильной работой? что произошло при добавлении виджетов? Не могли бы вы уточнить свой вопрос? также, как предложил Виллем, пожалуйста, поставьте models.py , представления и ваш шаблон

3. если это просто стиль, который не отображается, возможно, трей для очистки истории браузера.

4. @ha-neul вот он, я обновил свой вопрос

Ответ №1:

Привет, вы должны указать «формы». перед каждой строкой.

Например: формы.TextInput(attrs= …

Также используйте формы.ModelForm

Комментарии:

1. Это только в том случае, если вы явно не импортировали идентификаторы, например from django.forms import TextInput, ModelForm, DateTimeInput

2. @Willem Van Onsem это не сработает? класс ForumForm(forms. ModelForm): класс Meta: модель = Поля форума = [‘издатель’, ‘тема’, ‘текст’, ‘дата’] виджеты = { ‘издатель’: формы. TextInput(attrs={‘class’: ‘form-control’}), ‘тема’: формы. TextInput(attrs={‘class’: ‘form-control’}), ‘текст’: формы. Текстовая область (attrs={‘class’: ‘form-control’}), ‘дата’: формы. DateTimeInput(attrs={‘class’: ‘form-control’}) }