Field expected a number but got ' '

Не могу понять почему поле id_cs пустое, если я это поле в forms.py добавляю в exclude, при этом же я ему присваиваю конкретное значение для записи. Все работает, если убираю его из exclude. Но я бы все же хотел, чтобы оно было скрытым в шаблоне. Я точно знаю, что ему присваивается значение по умолчанию, в request.user.profile.id_cs есть значение.

ValueError: Field 'id_cs' expected a number but got ''.

id_gpu :
    Выберите корректный вариант. Вашего варианта нет среди допустимых значений.

Я также использую вложенные зависимые выпадающие списки и от выбранного id_cs зависит, что будет в id_gpu, вероятно, это происходит именно из-за этого. Значение же выбранного id_cs передаю через кеш в js

views.py

class GroupCreateView(CreateView):
    template_name = 'main/group.html'

    model = Group
    form_class = GroupForm
    success_url = reverse_lazy('start')

    def get(self, request, id_group=None, *args, **kwargs):
        id_current_cs = request.user.profile.id_cs_id
        form = self.form_class(initial={'id_cs': id_current_cs})
        context = {
            'form': form,
            'id_current_cs': id_current_cs,
        }
        print('id_current_cs = ', id_current_cs)
        return render(request, self.template_name, context)

    def post(self, request, id_group=None, *args, **kwargs):
        error = ''
        form = GroupForm(request.POST)

        if request.POST.get('save') and form.is_valid():
            just_created = form.save(commit=False)
            just_created.Create_User = request.user
            just_created.id_filial = request.user.profile.id_filial
            just_created.id_cs = request.user.profile.id_cs
            just_created.save()
            return HttpResponseRedirect(reverse('main:edit_work', args=(just_created.id_group,)))
        elif request.POST.get('back'):
            return HttpResponseRedirect(reverse('start', ))

        else:
            error = 'Форма заполнена некорректно'

            context = {
                'title': 'Группа работ',
                'form': form,
                'error': error,
            }
            return render(request, 'main/group.html', context)

def load_gpu(request):
    id_cs = request.GET.get('id_cs')
    list_gpu = GPU.objects.filter(id_cs=id_cs).order_by('name_gpu')
    print('list_gpu =', list_gpu)
    return render(request, 'main/gpu_dropdown_list_options.html', {'list_gpu': list_gpu})

models.py

class Filial(models.Model):
    id_filial = models.AutoField(primary_key=True)
    name_filial = models.CharField(max_length=256)

    def __str__(self):
        return self.name_filial

    class Meta:
        db_table = 'Filial'
        verbose_name = 'Филиал'
        verbose_name_plural = 'Филиалы'


class CS(models.Model):
    id_cs = models.AutoField(primary_key=True)
    name_cs = models.CharField(max_length=256)

    id_filial = models.ForeignKey('Filial', models.DO_NOTHING, blank=True, null=True)

    def __str__(self):
        return self.name_cs

    class Meta:
        db_table = 'Compressor_station'
        verbose_name = 'станция'
        verbose_name_plural = 'станции'


class GPU(models.Model):

    id_gpu = models.AutoField(primary_key=True)
    name_gpu = models.CharField(max_length=256)

    id_cs = models.ForeignKey('CS', models.DO_NOTHING, blank=True, null=True,
                              related_name='related_name_cs')

    def __str__(self):
        return self.name_gpu

    class Meta:
        db_table = 'G_p_u'
        verbose_name = 'агрегат'
        verbose_name_plural = 'агрегаты'


class Group(models.Model):

    id_group = models.AutoField(primary_key=True)

    id_filial = models.ForeignKey('Filial', models.DO_NOTHING, related_name='filial')

    id_cs = GroupedForeignKey(CS, "id_filial", on_delete=models.SET_NULL, null=True, related_name='cs')

    id_gpu = GroupedForeignKey(GasPumpingUnit, "id_cs", on_delete=models.SET_NULL, blank=True, null=True, related_name='gpu')

    Create_User = models.CharField(max_length=256, blank=True, null=True)

    def __str__(self):
        return self.name_group

    class Meta:
        db_table = 'Group'
        verbose_name = 'Группа работ'
        verbose_name_plural = 'Группы работ'

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    employee_number = models.CharField(max_length=200, blank=True)
    isAdmin = models.BooleanField(default=False)
    isSpecialist = models.BooleanField(default=False)

    id_filial = models.ForeignKey('Filial', models.SET_NULL, blank=True, null=True, related_name='Profile_filial')

    id_cs = GroupedForeignKey(CS, "id_filial", blank=True, null=True, related_name='Profile_cs')

urls.py

urlpatterns = [
...
     path('ajax/load-gpu/', views.load_gpu, 
     name='ajax_load_gpu')
]

forms.py

class GroupForm(ModelForm):
    required_css_class = 'required'

    class Meta:
        model = Group
        fields = [
            'id_filial', 'id_cs',
            'id_gpu',
            'name_group', 'start_date', 'end_date', 'short_description']
        exclude = (
            'id_filial',
            'id_cs'
        )

        widgets = {
            "id_filial": Select(attrs={
                'class': 'form-select'
            }),

            "id_cs": Select(attrs={
                'class': 'form-select',
            }),

            "id_gpu": Select(attrs={
                'class': 'form-select'
            }),
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['id_gpu'].queryset = GasPumpingUnit.objects.none()

        if 'id_cs' in self.data:
            try:
                id_cs = int(self.data.get('id_cs'))
                self.fields['id_gpu'].queryset = GasPumpingUnit.objects.filter(id_cs=id_cs).order_by('name_gpu')
            except (ValueError, TypeError):
                pass  # invalid input from the client; ignore and fallback to empty gpu queryset
        elif self.instance.id_gpu:
            self.fields['id_gpu'].queryset = self.instance.id_cs.related_name_cs.all().order_by('name_gpu')

file.js

jQuery( function($) {
    let url = $("#groupForm").attr("data-list-gpu-url");  // get the url of the `load_gas_pumping_unit` view

    $.ajax({                       // initialize an AJAX request
        url: url,                    // set the url of the request (= localhost:8000/main/ajax/load-gas-pumping-unit/)
        data: {
            'id_cs': csId       // add the id_cs id to the GET parameters
        },
        success: function (data) {   // `data` is the return of the `load_gas_pumping_unit` view function
            $("#id_id_gpu").html(data);  // replace the contents of the city input with the data that came from the server
        }
    });
});

file.html

{% for field in form.visible_fields %}
                        <table class='table align-middle table-borderless work-tab'>
                            <tbody>
                            <tr>
                                <td class="first">{{ field.label }}</td>
                                <td class="second">{{ field }}</td>
                            </tr>
                            </tbody>
                        </table>
                    {% endfor %}

                    <!--В цикле перечисленные все скрытые поля-->
                    {% for hidden in form.hidden_fields %}
                        {{ hidden }}
                    {% endfor %}

<script>
       let csId = '{{ id_current_cs|escapejs }}';
    </script>
Вернуться на верх