首页 > 解决方案 > 将外键从用户输入传递到数据库

问题描述

我试图让用户输入数据并存储到数据库中并与其他数据映射。

模型:

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>

提前感谢您的帮助。

标签: pythondjango

解决方案


Django 表单使用nameHTML 控件中的属性来捕获表单数据。

<input id="code" name="code" class="form-control" type="text" maxlength="4" required></input>

我只加了name="code"。这应该使它工作。


推荐阅读