django - 具有基于外键的字段的 Django 表单
问题描述
我正在开发一个添加模型新实例的 Django 表单。Model 本身有一个 ForeignKey 实例。假设我想记录每个工人的所有工作班次。
我的模型:
class WorkShifts(models.Model):
date = models.DateField()
check_in = models.TimeField()
check_out = models.TimeField()
person_name = models.ForeignKey(Worker, on_delete=models.DO_NOTHING)
这是我的表格:
class AddWorkShifts(forms.ModelForm):
date = forms.DateField(initial=datetime.date.today, input_formats=['%d/%m/%Y'])
check_in = forms.TimeField()
check_out = forms.TimeField()
class Meta:
model = WorkShifts
fields = '__all__'
def __init__(self, *args, **kwargs):
super(AddWorkShifts, self).__init__(*args, **kwargs)
self.fields['date'].widget.attrs['class'] = 'form-control'
self.fields['check_in'].widget.attrs['class'] = 'form-control'
self.fields['check_out'].widget.attrs['class'] = 'form-control'
self.fields['person_name'].widget.attrs['class'] = 'form-control'
我的 HTML 代码:
<form method="POST">
{% csrf_token %}
{{ form.date }}<br />
{{ form.check_in }}<br />
{{ form.check_out }}<br />
{{ form.person_name }}
<button type="submit">Load</button>
</form>
而我的观点:
def load_shifts(request):
form = AddWorkShifts()
if request.method == 'POST':
form = AddWorkShifts(request.POST)
if form.is_valid:
form.save()
context = {'form': form}
return render(request, 'users/wshifts.html', context)
在这一点上,一切正常。请注意 form.is_valid 没有 () 符号。
但是由于我有这么多人(外键),我配置了一个 JS 自动完成插件(EaseAutoComplete)并重新设计了这样的表单:
<form align="center" method="POST">
{% csrf_token %}
<input type="text" class="p_name" id="provider-file" />
{{ form.date }}<br />
{{ form.check_in }}<br />
{{ form.check_out }}<br />
<button type="submit">Agregar</button>
</form>
自动完成建议取自 json 列表。但是虽然自动完成功能工作正常,但现在我无法创建新实例。
我做错了什么?
解决方案
您的表格未发送person_name
,这是表格要求的。您需要使用name
输入字段中的属性为表单提供值。
<input type="text" class="p_name" id="provider-file" name="person_name" />
推荐阅读
- c# - 如何在 Umbraco 8 中使用 DocumentType(模型)制作主布局模板?
- laravel - Laravel 授权更新用户
- javascript - 动态添加多个表单控件
- mysql - 如何在表中实现位数据类型
- containers - 如何使用 Garden-RunC 后端手动进入应用容器
- react-native - 如何在电源按钮上运行功能 3 次单击?
- angular - ag-grid 中的行编辑
- python - python3 queue.put() 阻塞 main
- python - 如何修复“预期的 dense_2 具有 2 个维度”
- google-api - 如何获取登录方式?