Form.as_p работает нормально, но отдельные поля формы отправляются некорректно

Я уже настраивал свой шаблон, импортируя форму с помощью form.as_p, и он работает нормально. Однако мне нужно указать каждое поле, поскольку у меня есть поле, которое я не хочу, чтобы пользователь видел (и мне нужно, чтобы оно было в админке django, чтобы я не мог исключить его из формы)

Однако, когда я создаю форму с отдельными полями и отправляю ее, я не получаю перенаправления, я просто возвращаюсь к заполненной форме.

Я настроил несколько полей для печати, а также попытался напечатать в form_invalid, но ничего не отображается, я понятия не имею, в чем проблема. Может ли кто-нибудь предложить, как это исправить или, возможно, решить проблему другим способом?

Форма в шаблоне

<form method="post" enctype="multipart/form-data" id="adForm" data-municipalities-url="{% url 'ajax_load_municipalities' %}" data-areas-url="{% url 'ajax_load_areas' %}" novalidate>
    {% csrf_token %}  

    <!-- {{ form.as_p }} -->

    {{ form.non_field_errors }}

    <div class="fieldWrapper">
      {{ form.province.errors }}
      {{ form.province.label_tag }}
      {{ form.province }}
    </div>

    <div class="fieldWrapper">
      {{ form.municipality.errors }}
      {{ form.municipality.label_tag }}
      {{ form.municipality }}
    </div>

    <div class="fieldWrapper">
      {{ form.area.errors }}
      {{ form.area.label_tag }}
      {{ form.area }}
    </div>

    <div class="fieldWrapper">
      {{ form.name.errors }}
      {{ form.name.label_tag }}
      {{ form.name }}
    </div>

    <div class="fieldWrapper">
      {{ form.age.errors }}
      {{ form.age.label_tag }}
      {{ form.age }}
    </div>

    <div class="fieldWrapper">
      {{ form.title.errors }}
      {{ form.title.label_tag }}
      {{ form.title }}
    </div>

    <div class="fieldWrapper">
      {{ form.description.errors }}
      {{ form.description.label_tag }}
      {{ form.description }}
    </div>

    <div class="fieldWrapper">
      {{ form.days_per_week.errors }}
      {{ form.days_per_week.label_tag }}
      {{ form.days_per_week }}
    </div>

    <div class="fieldWrapper">
      {{ form.hundras.errors }}
      {{ form.hundras.label_tag }}
      {{ form.hundras }}
    </div>

    <div class="fieldWrapper">
      {{ form.size_offered.errors }}
      {{ form.size_offered.label_tag }}
      {{ form.size_offered }}
    </div>

    <div class="fieldWrapper">
      {{ form.image1.errors }}
      {{ form.image1.label_tag }}
      {{ form.image1 }}
    </div>

    <div class="fieldWrapper">
      {{ form.image2.errors }}
      {{ form.image2.label_tag }}
      {{ form.image2 }}
    </div>

    <div class="fieldWrapper">
      {{ form.image3.errors }}
      {{ form.image3.label_tag }}
      {{ form.image3 }}
    </div>

    <div class="fieldWrapper">
      {{ form.payment_type.errors }}
      {{ form.payment_type.label_tag }}
      {{ form.payment_type }}
    </div>



    <button type="submit">Publicera annons</button>

  </form>

Вид

class NewAdTakeMyDog(CreateView):
    model = Advertisement
    form_class = NewAdTakeMyDogForm
    template_name = 'core/advertisement_form_take.html'
    success_url = reverse_lazy('view_ads_take_my_dog')

    def __init__(self):
        print('init')
        self.pk = None


    def form_valid(self, form):
        print('Form valid')
        form.instance.author = self.request.user
        form.instance.is_offering_own_dog = True
        form.instance.is_published = False
        response = super().form_valid(form)
        return response

    def get_success_url(self):
        print('Get success url')
        if self.object.payment_type == 'S':
            return reverse('swish_payment_template', kwargs={'pk': self.object.pk})
        if self.object.payment_type == 'B':
            return reverse('bg_payment', kwargs={'pk': self.object.pk})

forms.py

class NewAdTakeMyDogForm(forms.ModelForm):
    
    CHOICES = [('S',f'Swish - {PRICE_SWISH}'),('B',f'Bankgiro - {PRICE_BANKGIRO}')]
    payment_type = forms.CharField(label='Betalsätt', widget=forms.RadioSelect(choices=CHOICES))

    hundras = forms.ModelChoiceField(
        queryset=DogBreeds.objects.all(),
        widget=autocomplete.ModelSelect2(url='breed-autocomplete')
    )

    class Meta:
        model = Advertisement
        fields = ('author', 'province', 'municipality', 'area', 'title', 'name', 'age', 'description', 'days_per_week', 'size_offered', 'hundras', 'image1', 'image2', 'image3', 'payment_type')


    def __init__(self, *args, **kwargs):
        super(NewAdTakeMyDogForm, self).__init__(*args, **kwargs)
        self.fields['municipality'].queryset = Municipality.objects.none()
        self.fields['area'].queryset = Area.objects.none()
        self.fields['area'].required = False

        if 'province' in self.data:
            try:
                # Set municipality queryset
                province_id = int(self.data.get('province'))
                self.fields['municipality'].queryset = Municipality.objects.filter(province_id=province_id).order_by('name')
            
                # Set area queryset
                municipality_id = int(self.data.get('municipality'))
                self.fields['area'].queryset = Area.objects.filter(municipality_id=municipality_id).order_by('name')
                

            except (ValueError, TypeError) as e:
                pass # invalid input from the client; ignore and fallback to empty Municipality/Area queryset
          

В итоге я решил проблему, создав дополнительную форму, которую я использую для интерфейса администратора.

Также я заставил работать хрустящие формы, используя:

{{form|crispy}}

вместо:

{% crispy form %}
Вернуться на верх