Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

253
Vistas
addChild() falta 1 argumento posicional requerido: 'pk

Tengo dos modelos, a saber, padre e hijo. He logrado hacer un modelo de formulario para registrar a un Padre. Ahora quiero poder agregar un hijo al padre.

Resultado esperado: cada padre debe tener un enlace que abra un formulario de registro de niños. El campo de nombre principal debe tener el valor inicial del principal.

Actualmente recibo este error,

addChild() falta 1 argumento posicional requerido: 'pk

modelos.py

 class Parent(models.Model): surname = models.CharField(max_length=150, null=False, blank=False) first_name = models.CharField(max_length=150, null=False, blank=False) class Child(models.Model): parent = models.ForeignKey(Parent, null=True, blank=True, on_delete=SET_NULL) first_name = models.CharField(max_length=50, null=False, blank=False) last_name = models.CharField(max_length=50, null=False, blank=False)

views.py (¿Qué me estoy perdiendo en mi vista addChild?)

 def addParent(request): form = ParentForm() if request.method == 'POST': form = ParentForm(request.POST, request.FILES) if form.is_valid(): form.save() def addChild(request, pk): parent = Parent.objects.get(id=pk) form = ChildForm(initial={'parent' :parent}) if request.method == 'POST': form = ChildForm(request.POST) if form.is_valid(): form.save()
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Se pk que la URL del paquete es parte de la URL, por lo que debe actualizar los patrones de urlpatterns a:

 path('add_child/ <int:pk> /', views.addChild, name='add_child'),

Si visita la URL, debe visitar add_child/ 123 / con 123 la clave principal del padre para el que desea agregar un hijo.

Dado que la clave principal del padre está en la URL, no tiene mucho sentido mantenerla en el formulario. Puede reescribir ChildForm para:

 from django import forms class ChildForm(forms.ModelForm): class Meta: model = Child fields = ['first_name', 'last_name'] # ← no parent

y deje que la vista establezca el padre al enviar el formulario:

 from django.shortcuts import redirect def addChild(request, pk): if request.method == 'POST': form = ChildForm(request.POST) if form.is_valid(): form.instance .parent_id = pk form.save() return redirect(' name-of-some-view ') else: form = ChildForm(initial={'parent' :parent}) # …

Nota : en caso de una solicitud POST exitosa, debe realizar una redirect [Django-doc] para implementar el patrón Publicar/Redireccionar/Obtener [wiki] . Esto evita que realice la misma solicitud POST cuando el usuario actualiza el navegador.


Nota : Las funciones normalmente se escriben en snake_case , no en PascalCase , por lo tanto, es recomendable cambiar el nombre de su función a add_child , no a addChild .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda