Django Формы с полем на основе внешнего ключа - PullRequest
0 голосов
/ 11 апреля 2020

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

Что я делаю не так?

1 Ответ

0 голосов
/ 11 апреля 2020

Ваша форма не отправляет person_name, что требуется по форме. Вам необходимо использовать атрибут name в поле ввода для предоставления значения в форму.

<input type="text" class="p_name" id="provider-file" name="person_name" />

...