Django-如何通过遍历数据库查询来创建表单字段?
因此,我想根据存储在数据库中的值设置一个表单 假设我有一个这样的模型:Django-如何通过遍历数据库查询来创建表单字段?,django,forms,django-models,django-forms,django-views,Django,Forms,Django Models,Django Forms,Django Views,因此,我想根据存储在数据库中的值设置一个表单 假设我有一个这样的模型: class Questions(models.Model): question = models.CharField(max_length=350) **form.py** class QuestionsForm(forms.Form): question = forms.ChoiceField(max_length=100) answer= forms.CharField(max_length=
class Questions(models.Model):
question = models.CharField(max_length=350)
**form.py**
class QuestionsForm(forms.Form):
question = forms.ChoiceField(max_length=100)
answer= forms.CharField(max_length= 255, widget=forms.Textarea)
def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
initial=None, error_class=ErrorList, label_suffix=None,
empty_permitted=False): #import Errorlist
super(QuestionsForm, self).__init__(data, files, auto_id, prefix, initial, error_class,
label_suffix, empty_permitted)
self.fields['question'].choices = for x.question in Questions.objects.all()
我想用这种方式创建一个表单:
for x in Questions:
answer = forms.CharField(label = x.question)
因此,表单中的答案字段数量与数据库中存储的问题数量完全相同。有什么想法吗?使用foreignkey创建一个中介表,对问题进行分组,并为中介创建一个内联表单集:
class Quiz(models.Model):
question = models.CharField(max_length=50)
class Question(models.Model):
quiz = models.ForeignKey(Quiz)
question = models.CharField(max_length=350)
quiz = Quiz.objects.get(id=1)
QuestionFormSet = inlineformset_factory(Quiz, Question)
formset = QuestionFormSet(instance=quiz)
您可以这样尝试:
class Questions(models.Model):
question = models.CharField(max_length=350)
**form.py**
class QuestionsForm(forms.Form):
question = forms.ChoiceField(max_length=100)
answer= forms.CharField(max_length= 255, widget=forms.Textarea)
def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
initial=None, error_class=ErrorList, label_suffix=None,
empty_permitted=False): #import Errorlist
super(QuestionsForm, self).__init__(data, files, auto_id, prefix, initial, error_class,
label_suffix, empty_permitted)
self.fields['question'].choices = for x.question in Questions.objects.all()
我会在模板中而不是在表单中这样做。您可以轻松地迭代模板中的问题。