Я просматривал документацию 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 }}
Я уверен, как я буду о создании форм возможно, и не самый лучший, так что не стесняйтесь критиковать это :-) Как я уже говорил, я читал решения, связанные с перепрофилированием формы, но я хочу, чтобы это произошло «на лету» ... если я могу прозрачно прозрачно то это было бы хорошо, я думаю. Я также видел библиотеки, которые позволят вам динамически создавать формы, но это просто кажется излишним.
Вам нужен Аякс, если вы хотите, чтобы это произошло автоматически без обновления браузера - вид должен принять форму ввод и реагировать с содержанием, Javascript может читать и заменить HTML элемент в вашем форма. –