简体   繁体   English

带有 url 参数的 django-createview 显示错误

[英]django- createview with url parameter shows error

I have a view AsignacionGeneral from where I call the view assignacion_contact with href="{% url 'gestionAsignacion:assignacion_contact' pk=asig.id %} and pass the parameter by url which is the primary key to be inserted later in the foreign key idasignacion_general = models.ForeignKey('AsignacionGeneral', models.DO_NOTHING, db_column='idasignacion_general') , the view assignacion_contact has a form, it opens fine, I fill the form but when I send it I want it to stay in the same view. example: I am in the url "assignation/assignationContact/1", the pk=1 , I take that value and assign it to the Foreign Key, I fill the form with the data but when I send it it redirects me to 'assignation/assignationContact' which does not exist and I want it to stay in the url ' 'asignacion/asignacionContact/1'我有一个 AsignacionGeneral 视图,我用href="{% url 'gestionAsignacion:assignacion_contact' pk=asig.id %}调用视图 assignacion_contact 并通过 url 传递参数,这是稍后插入外键的主键idasignacion_general = models.ForeignKey('AsignacionGeneral', models.DO_NOTHING, db_column='idasignacion_general') ,视图assignacion_contact有一个表格,它打开很好,我填写表格但是当我发送它时我希望它保持在同一个视图中. 示例:我在 url "assignation/assignationContact/1" 中,在 pk=1 中,我获取该值并将其分配给外键,我用数据填写表格,但是当我发送它时它会将我重定向到' assignment/assignationContact' 不存在,我希望它留在 url ''asignacion/asignacionContact/1'

error image错误图像

url.py网址.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视图.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 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模型.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表格.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']

This path('asignacionContact/<int:pk>',... means that the primary key of the object is required to show the view.path('asignacionContact/<int:pk>',...表示需要对象的主键才能显示视图。

For example, an object with pk=1 would work for the URL path asignacion/asignacionContact/1 .例如,具有pk=1的对象适用于 URL 路径asignacion/asignacionContact/1

You don't have a view that's just asignacion/asignacionContact/ in your urls.py.您的 urls.py 中没有仅是asignacion/asignacionContact/的视图。

That's why you are getting a Page not found (404).这就是为什么您找不到页面 (404)。

I think you think <int:pk> in urls.py are GET querystrings .我认为您认为 urls.py 中的<int:pk>GET querystrings They are not.他们不是。 They are required URL values.它们是必需的 URL 值。 GET parameters appear appended to the URL for example if you were to submit a form with a method="GET" .例如,如果您要提交带有method="GET"的表单,则GET参数会附加到 URL 中。 The form data would appear in the URL.表单数据将出现在 URL 中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM