Я просматривал документацию Django и результаты поиска Google весь день, и я все еще несколько застрял в своей попытке создать динамическую форму. Я надеюсь, что мне просто нужен кто-то, кто подтолкнет меня в правильном направлении :-) Я только начинаю изучать Django, так что я все еще новичок; однако я уже являюсь промежуточным пользователем Python.
Я пытаюсь создать динамическую форму, в которой пользователь делает выбор из раскрывающегося меню, и на основе этого выбора другая часть формы будет автоматически обновляться для отображения результатов, соответствующих текущему выбранному элемент, но из другой таблицы базы данных.
Я попробую использовать упрощенную версию моделей из учебника Django, чтобы лучше проиллюстрировать то, что я пытаюсь сделать:
# models.py
from django.db import models
class Poll(models.Model):
question = models.CharField(max_length=200)
class Choice(models.Model):
poll = models.ForeignKey(Poll)
choice = models.CharField(max_length=200)
Допустим, я хочу иметь что-то вроде раскрывающегося поля выбора, заполненного с вопросом из каждого опроса в базе данных. Я также хочу иметь текстовое поле, в котором отображаются соответствующие варианты для текущего выбранного опроса, который будет обновляться на лету всякий раз, когда пользователь выбирает другой пул. Я смог выяснить это, разместив кнопку и отправив информацию обратно в форму; Однако я пытаюсь сделать это автоматически, когда пользователь делает выбор.На данный момент мое представление выглядит примерно так:
#view.py
from django import forms
from django.shortcuts import render_to_response
from myapp.models import Poll,Choice
class MyModelChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
return "%s" % obj.question
class PollSelectionForm(forms.Form):
polls = MyModelChoiceField( queryset=Poll.objects.all() )
class ChoiceResults(forms.Form):
def __init__(self, newid, *args, **kwargs):
super(ChoiceResults, self).__init__(*args, **kwargs)
self.fields['choice'] = forms.TextField( initial="" )
def main(request):
return render_to_response("myapp/index.html", {
"object": PollSelectionForm(),
"object2": ChoiceResults(),
})
Мой шаблон очень прост, примерно что-то вроде
{{ object }}
{{ object2 }}
Я уверен, что способ, которым я собираюсь создавать формы, вероятно, тоже не лучший, так что почувствуйте Можно также критиковать это :-) Как я уже упоминал, я читал решения, связанные с репостом формы, но я хочу, чтобы это происходило на лету ... если я могу репостить прозрачно, тогда это будет нормально, я думаю. Я также видел библиотеки, которые позволят вам динамически создавать формы, но это кажется излишним.