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