Django- createview с параметром url показывает ошибку

Я создал представление с помощью generic view createview, в это представление я передаю параметр по url, у меня есть форма, но после нажатия на кнопку submit она перенаправляется на тот же url без параметра и показывает ошибку, я пытался проверить недействительность формы с помощью "form_invalid", но она не переходит туда, она также не переходит на "form_valid" и "get_success_url" не работает, я не знаю что не так. Я хочу перенаправить его в то же представление с параметром в url.

введите описание изображения здесь

url.py

app_name = 'gestionAsignacion'

urlpatterns = [
     
    path('asignacionContact/<int:pk>',AsignacionCreateView.as_view(), name='asignacion_contact'),
    path('detalle/asignacion/<int:pk>',descargarAsignacion.as_view(), name='descargar_asignacion'),
    path('asignacionGeneral/',asignacionGeneral.as_view(), name='asignacion_general'),
]


view.py

class AsignacionCreateView(CreateView):
    model=AsignacionContact
    form_class=AsignacionForm
    template_name='gestionAsignacion/asignacion_contact.html'
    # success_url = reverse_lazy('gestionAsignacion:asignacion_general')
    
    def get_initial(self):
        # call super if needed
       
        return {'idasignacion_general': self.kwargs['pk']}

    def form_valid(self, form):
        print('hola form_valid')
        isvalid = super().form_valid(form)
        return isvalid

    def form_invalid(self, form):
        print ("form is invalid")
        return super().form_invalid(form)
   
    def get_success_url(self):
        return HttpResponseRedirect(reverse('gestionAsignacion:asignacion_general'))


    def get_context_data(self, **kwargs):
        # Llame primero a la implementación base para obtener un contexto
        context = super().get_context_data(**kwargs)
       
        # Agregar un QuerySet de todos los libros
        context['asig_general'] = AsignacionGeneral.objects.get(id=self.kwargs['pk'])
        context['object_list'] = AsignacionContact.objects.filter(idasignacion_general=self.kwargs['pk'])
        
        return context

model.py

class AsignacionContact(models.Model):
    id = models.IntegerField(primary_key=True)
    idasignacion_general = models.ForeignKey('AsignacionGeneral', models.DO_NOTHING, db_column='idasignacion_general')
    nombre_asignacion = models.CharField(max_length=100, blank=True, null=True)
    fecha_inicio = models.DateField(blank=True, null=True)
    fecha_fin = models.DateField(blank=True, null=True)
    observacion = models.CharField(max_length=255, blank=True, null=True)
    def __str__(self):
        return self.nombre_asignacion
    class Meta:
         managed = False
         db_table = 'asignacion_contact'

form.py

class AsignacionForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super(AsignacionForm, self).__init__(*args, **kwargs)
        for field in iter(self.fields):
            self.fields[field].widget.attrs.update({
                'class': 'form-control'
            })
    class Meta:
        model=AsignacionContact
        fields=['idasignacion_general','nombre_asignacion','fecha_inicio','fecha_fin','observacion']

Это path('asignacionContact/<int:pk>',... означает, что первичный ключ объекта необходим для отображения представления.

Например, объект с pk=1 будет работать для пути URL asignacion/asignacionContact/1.

У вас нет представления, которое просто asignacion/asignacionContact/ в вашем urls.py.

Поэтому вы получаете сообщение Page not found (404).

Я думаю, вы считаете, что <int:pk> в urls.py - это GET querystrings. Это не так. Это необходимые значения URL. Параметры GET появляются в URL, например, если вы отправляете форму с помощью method="GET". Данные формы появятся в URL.

Вернуться на верх