WedX - журнал о программировании и компьютерных науках

Поля формы отсутствуют в Django, видна только кнопка

Новичок в Django и проблема с отображением полей формы. То, что я вижу, это просто кнопка отправки. При нажатии форма наконец отображается, но с форматом для формы с неверными данными (типичная ошибка «это поле обязательно для заполнения» для каждого поля, красного поля и т. д.).
Форма работает нормально после ввода данных и снова нажав кнопку «Отправить» (сохраняет записи в моей базе данных). У меня есть несколько форм на одной странице, которые имеют одинаковое поведение.

Пример одной формы:

#model
class dbPara(models.Model):  #parameters
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    username = models.CharField(max_length=10)
    turns = models.FloatField(default=27)
    units = models.FloatField(default=5)
    rise = models.FloatField(default=2.9)
    rescutL = models.FloatField(default=0.0833333333)
    rescutH = models.FloatField(default=0.333333333)
    LorR = models.CharField(max_length=1, default='R')

    def __str__(self):
        return self.timestamp, self.username, self.turns, self.units, self.rise, self.rescutL, self.rescutH, self.LorR

#form
class ParaForm(ModelForm):
    class Meta:
        model = dbPara
        widgets = {'username': forms.HiddenInput()}
        fields =['username', 'turns', 'units', 'rise', 'rescutL', 'rescutH', 'LorR']

#view
def importParameters(request):
    if request.method == 'GET':
        form = ParaForm()
    else:
        form = ParaForm(request.POST)
        if form.is_valid():
            entry=dbPara(username = request.POST.get('username'),
                        turns = request.POST.get('turns'),
                        units = request.POST.get('units'),
                        rise = request.POST.get('rise'),
                        rescutL = request.POST.get('rescutL'),
                        rescutH = request.POST.get('rescutH'),
                        LorR = request.POST.get('LorR')
                        )
            entry.save()

    return render(request, 'main.html',
              {'ParaHTML' : form })

#url
urlpatterns = patterns('Inputs.views',
    url(r'^importParameters/$', 'importParameters', name='urlParameters'),
)

#main.html
<div class='col-lg-3'>
<h4>Set Rosetta Parameters</h4>
<action="{% url "urlParameters" %}" method="post">{% csrf_token %}
{{ ParaHTML|crispy }}
<input type="hidden" name = "username" value = "{{ user.get_username }}">
<input type="submit" class="btn btn-primary" value="Set">
</form>
</div>

Ценю любые советы (лучше простые, чем "наиболее правильные, но сложные"). Может ли это быть связано с использованием в модели значений по умолчанию? Разве это не «заполнит форму» и не приведет к «POST» при первом посещении страницы, что приведет к появлению только кнопки? Мысли?

26.10.2015

  • Одна подсказка: я никогда не могу увидеть значения по умолчанию, когда форма наконец загружается: используя совет Мушахида ниже, или добавляя initial={....} к: if request.method == 'GET': form = ParaForm( initial =.. ....) 26.10.2015
  • На какой URL вы собираетесь изначально, чтобы увидеть пустую форму? 26.10.2015
  • Привет, Даниэль, следует указать на представление importParameters. Я ожидаю, что форма будет пустой ("GET") при первом посещении страницы, но, как сказано, это просто кнопка, без полей формы 27.10.2015

Ответы:


1

Одно предложение здесь ....

если просто использовать request.POST.get('что-нибудь'), то это вызовет ошибку, если конкретная строка не будет найдена, как в примере ('что-нибудь') строка...

Потому что request.POST.get('anything') вернет None, если 'что-нибудь' не находится в request.POST.

Кроме того, .get позволяет указать дополнительный параметр со значением по умолчанию, которое возвращается, если ключ отсутствует в словаре.

например: исправлено будет request.POST.get('что-нибудь', 'mydefaultvalue')

26.10.2015
  • Спасибо, Мушахид. Пробовал, но не помогло. Хороший способ включить значения по умолчанию, буду использовать его, когда моя форма заработает. 26.10.2015
  • Да, конечно.. это будет хорошей практикой, чтобы начать с нуля.... я 26.10.2015
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]