Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django测验-用户生成_Python_Django - Fatal编程技术网

Python Django测验-用户生成

Python Django测验-用户生成,python,django,Python,Django,所以我有这些模型,它们组成了一个测验。我面临的问题是制作一个表单来验证这些模型。我知道怎么做,但没用 class QAForm(forms.Form): answers = forms.ChoiceField(label='Question is this', choices=[('Answer1','Answer1'),('Answer2','Answer2')], widget=forms.RadioSelect()) 这适用于1种形式,而不是数千种形式。我将如何修改此代码,以便用

所以我有这些模型,它们组成了一个测验。我面临的问题是制作一个表单来验证这些模型。我知道怎么做,但没用

class QAForm(forms.Form):
    answers = forms.ChoiceField(label='Question is this', choices=[('Answer1','Answer1'),('Answer2','Answer2')], widget=forms.RadioSelect())
这适用于1种形式,而不是数千种形式。我将如何修改此代码,以便用户将所有用户生成的问题和答案视为表单,并可以提供自己的答案

我有这样一个方法(它有效,但我知道这不是一个好的做法):

我的模型:

class Answer(models.Model):
        answer = models.CharField(max_length=120)
        question = models.ForeignKey('Questions', null=True, blank=True)

        def __unicode__(self):
                return self.answer

IMPORTANCE = (
        ('Irrelevant', 'Irrelevant'),
        ('A Little Important', 'A Little Important'),
        ('Somewhat Important', 'Somewhat Important'),
        ('Very Important', 'Very Important'),
        ('Mandatory', 'Mandatory'),
)

class Questions(models.Model):
        owner = models.ForeignKey(User)
        question = models.CharField(max_length=300)
        importance = models.CharField(max_length=120, choices=IMPORTANCE, null=True, blank=True)
        updated = models.DateTimeField(auto_now=False, auto_now_add=True)
        timestamp = models.DateTimeField(auto_now=True)

        def __unicode__(self):
                return self.question

        class Meta:
                verbose_name            ='Question'
                verbose_name_plural     ='Questions'


class UserAnswers(models.Model):
        owner = models.ForeignKey(User)
        question = models.ForeignKey(Questions)
        answer = models.ForeignKey(Answer)
        importance = models.CharField(max_length=120, choices=IMPORTANCE)

        def __unicode__(self):
                return str(self.owner) + " " + str(self.answer) + " " + str(self.importance)
这个怎么样?(还没有实际测试过,但应该可以正常工作)

然后像这样启动它-

q = Question.objects.get(pk=1)
qform = QuestionForm(instance=q)
当您只需要一个表单时,可以执行此操作。如果你想要上千个,你可以用一个

附言:我假设答案模型有一个问题模型的外键,它们已经被填满了。

这个怎么样?(还没有实际测试过,但应该可以正常工作)

然后像这样启动它-

q = Question.objects.get(pk=1)
qform = QuestionForm(instance=q)
当您只需要一个表单时,可以执行此操作。如果你想要上千个,你可以用一个


PS:我假设答案模型有一个问题模型的外键,它们已经被填满了。

最新的代码满足您的需求。您可以尝试以下代码:

class QuestionForm(forms.ModelForm):
    answer = forms.ChoiceField(required=True, widget=forms.RadioSelect())

def __init__(self, question=None, *args, **kwargs):
    super(QuestionForm, self).__init__(*args, **kwargs)
    self.fields['answer'].choices = [(a.text, a.value) for a in Answer.objects.filter(question=question)]

class Meta:
    model = Question
    fields = ('text')

符合您需求的最新代码。您可以尝试以下代码:

class QuestionForm(forms.ModelForm):
    answer = forms.ChoiceField(required=True, widget=forms.RadioSelect())

def __init__(self, question=None, *args, **kwargs):
    super(QuestionForm, self).__init__(*args, **kwargs)
    self.fields['answer'].choices = [(a.text, a.value) for a in Answer.objects.filter(question=question)]

class Meta:
    model = Question
    fields = ('text')

@arulmr刚刚添加了我的视图,向您展示了我当前的工作方式。用户生成的部件工作正常。表单的呈现不正常。您根本没有验证表单。看看这个例子。如果您需要数千张相同的表格,请查看Formset-out。如果您想从模型生成表单,请检查ModelForm。@Bibhas是的,我意识到表单没有验证。您将如何实现问答表单?这样就有了两个独立的模型?@arulmr刚刚添加了我的视图,向您展示了我当前的工作方式。用户生成的部分工作正常。表单的呈现不正常。您根本没有验证表单。看看这个例子。如果您需要数千张相同的表格,请查看Formset-out。如果您想从模型生成表单,请检查ModelForm。@Bibhas是的,我意识到表单没有验证。您将如何实现问答表单?这样就有两个不同的模型了?哥们!这很有效。谢谢。我现在的问题是,它显示了答案模型中的所有对象(而不是关联的对象)。我将更新原始问题以包括我的模型。TBH:答案不需要多个关系。答案已经与多对一关系中的Foreignkey问题相关。删除行
answers=models.ManyToManyField(Answer)
,检查答案的foreignkey字段的值。哦,是的,谢谢。我已经玩了一段时间,以获得预期的结果。它现在运行良好,除了调用
表单。清除的数据['answer']
返回所有应答实例,而不是所选实例。(同样的情况也发生在
request.POST['answer']
)你的关系一团糟。清理干净,伙计!这很有效。谢谢。我现在的问题是,它显示了答案模型中的所有对象(而不是关联的对象)。我将更新原始问题以包括我的模型。TBH:答案不需要多个关系。答案已经与多对一关系中的Foreignkey问题相关。删除行
answers=models.ManyToManyField(Answer)
,检查答案的foreignkey字段的值。哦,是的,谢谢。我已经玩了一段时间,以获得预期的结果。它现在运行良好,除了调用
表单。清除的数据['answer']
返回所有应答实例,而不是所选实例。(同样的情况也发生在
request.POST['answer']
)你的关系一团糟。把它清理干净。