【发布时间】:2019-07-08 03:24:26
【问题描述】:
我已经开始创建一个表单。基本上,表格是二十个单词的“测试”。该表单由二十个文本字段组成,我想包含一个单词的定义。用户将输入单词。完成后,表格应验证数据并标记正确和错误。我在 django 中做了很多模型形式,但这个不同。此表单中的所有数据都必须作为上下文传递。
views.py
def get_test(request, username='default'):
template_name = 'main/test.html'
if request.method == 'POST':
pass
else:
lang = Language(config('USER'), config('PASS'))
streakinfo = lang.get_streak_info()
uniquewords = lang.get_unique_words()
testwords = get_test_words(uniquewords)
wordsdict = get_word_dict(testwords)
form = TestForm()
context = {
'testwords': testwords, # list of random unique test words
'wordsdict': wordsdict, # dict of words + definitions {word: {pronounciation, definition}}
'form': form,
}
return render(request, template_name, context)
forms.py
class TestForm(forms.Form):
word_1 = forms.CharField(label='1', max_length=100)
word_2 = forms.CharField(label='2', max_length=100)
word_3 = forms.CharField(label='3', max_length=100)
word_4 = forms.CharField(label='4', max_length=100)
word_5 = forms.CharField(label='5', max_length=100)
word_6 = forms.CharField(label='6', max_length=100)
word_7 = forms.CharField(label='7', max_length=100)
word_8 = forms.CharField(label='8', max_length=100)
word_9 = forms.CharField(label='9', max_length=100)
word_10 = forms.CharField(label='10', max_length=100)
word_11 = forms.CharField(label='11', max_length=100)
word_12 = forms.CharField(label='12', max_length=100)
word_13 = forms.CharField(label='13', max_length=100)
word_14 = forms.CharField(label='14', max_length=100)
word_15 = forms.CharField(label='15', max_length=100)
word_16 = forms.CharField(label='16', max_length=100)
word_17 = forms.CharField(label='17', max_length=100)
word_18 = forms.CharField(label='18', max_length=100)
word_19 = forms.CharField(label='19', max_length=100)
word_20 = forms.CharField(label='20', max_length=100)
我的意思是,手动浏览和渲染每个字段很简单,但我不知道并且从未做过的是没有模型。例如,我想建立一个表,第 1 列有定义(我实际上不需要label=##,因为我再次将数据作为上下文传递),第 2 列有字段。我如何将发布的数据联系在一起,以便在发布结果时,最有把握地将 col 2 与 col 1 进行检查?简而言之,如何手动呈现和验证表单并保持所有数据对齐?如果这是一个广泛的问题,我提前道歉。
更新:
我能够将测试数据放入表单并使用以下 (by hacking away at the forms.Form inheritance) 呈现字段:
class TestForm(forms.Form):
"""
Student test form
"""
def __init__(self, testdict, *args, **kwargs):
super().__init__(*args, **kwargs)
self.testdict = {} if testdict is None else testdict
d = self.testdict
for word in d:
answer = word
for key in d[word]:
value = str(d[word][key])
if key == 'id':
field_name = value
if key == 'definition':
question = value
self.fields[field_name] = forms.CharField(label=question, max_length=100)
仍然需要帮助。
【问题讨论】:
-
您需要验证在此表单中输入的数据吗?这就是你要问的,对吧?
-
第 2 列是什么?另外,您能否发布您已经尝试过的内容(在模板中)?只需在模板中使用
{{ form }},您就会对 django 视图的预期有所了解。 -
@ans2human 这是其中的一部分,是的。
-
知道了,花点时间回答。
-
@ans2human col 2 是字段。用户将用问题的答案填写该字段。第 1 列是问题。