我试图让用户输入数据并存储到DB中并与其他数据映射。
型号:
class Code(models.Model):
name = models.CharField(max_length=4, default=None, blank=True, unique=True)
在模型内,还有另一个类
class Pull(models.Model):
code_pull = models.ForeignKey(Code, on_delete=models.SET_NULL, null=True)
如何显示在窗体和视图中以进行调用,以便在用户在输入字段中输入数据时传递数据。
表格
class Code_Form(forms.ModelForm):
class Meta:
model = Code
fields = ('name',)
class Pull_Form(forms.ModelForm):
class Meta:
model = Pull
fields = ('code_pull', 'data1', 'prefix',)
#Inital Value is NULL
def __init__(self, *args, **kwargs):
super(Pull_Form, self).__init__(*args, **kwargs)
self.fields['code_pull'].queryset = CODE.objects.none()
if 'code_pull' in self.data:
c = self.data.get('code_pull')
self.fields['code_pull'].queryset = CODE.objects.filter(name=c)
#print(self.fields['code_pull'].queryset)
我更新了FORM的代码,因此由于代码字段为空,因此它从CODE_form(仍然错误)中初始化了值
这是视图:
def InputData(request, *args, **kwargs):
form = Pull_Form(request.POST or None)
if request.method == 'POST':
if form.is_valid():
data_add = form.save(commit=False)
data_add.code = form.cleaned_data['code_pull']
data_add.save()
messages.success(request, 'Successfully')
else:
messages.error(request, form.errors)
return render(request, template_name, {'form': form })
错误:由于提交表单时未选择code
的字段,因此无法添加数据。
错误代码:code - Select a valid choice. That choice is not one of the available choices.
{{ messages }}
<form id="form1" class="post-form" role=form method="POST" action=".">{% csrf_token %}
<input id="code_pull" class="form-control" type="text" maxlength="4" required></input>
<label for="code_pull">Code</label>
<button type="submit" class="btn">Save</button>
</form>
谢谢您的帮助。
答案 0 :(得分:0)
Django表单使用HTML控件中的name
属性来捕获表单数据。
<input id="code" name="code" class="form-control" type="text" maxlength="4" required></input>
我只添加了name="code"
。这应该使它工作。