【问题标题】:Django - How to create form fields by iterating through a database query?Django - 如何通过迭代数据库查询来创建表单字段?
【发布时间】:2014-06-10 10:37:31
【问题描述】:

所以我想根据我存储在数据库中的值设置一个表单。

假设我有一个这样的模型:

class Questions(models.Model):
    question = models.CharField(max_length=350)

我想以这种方式创建一个表单:

for x in Questions:
   answer = forms.CharField(label = x.question)

因此,表单中的答案字段数量与数据库中存储的问题完全相同。有什么想法吗?

【问题讨论】:

  • 我会在模板中而不是在表单中执行此操作。您可以轻松地遍历模板中的问题。

标签: django forms django-models django-forms django-views


【解决方案1】:

使用外键创建一个中介表,将问题分组并为中介创建一个内联表单集:

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)

【讨论】:

    【解决方案2】:

    你可以这样试试:

    **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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多