Я работаю над формой Django, которая добавляет новые экземпляры модели. Сама модель имеет экземпляр 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>
И мой view:
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. Но хотя функция автозаполнения работает нормально, теперь я не могу создавать новые экземпляры.
Что я делаю не так?