Para comentarles mi problema los contextualizo:
Es un ejercicio de prática.
Django 2.1.5; PyCharms

Tengo dos modelos relacionados, la idea es poder ingresar datos desde un 
mismo formulario a los dos modelos, para eso tengo lo siquiente:

*Modelos:*

class Autor(models.Model):

    nombre = models.CharField('Nombres', max_length=80)
    nacionalidad = models.CharField('Nacionalidad', max_length=80)
    edad = models.IntegerField('Edad')

    def __str__(self):

        return self.nombre


class Libros(models.Model):

    title = models.CharField('Título', blank=False, max_length=150)
    resume = models.TextField('Resumen', blank=True)
    autor = models.ForeignKey(Autor, on_delete=models.CASCADE)
    idioma = models.ForeignKey(Idioma, on_delete=models.CASCADE)

    def __str__(self):
        return self.title


*Formularios*

class forLibros(forms.ModelForm):

    class Meta:

        model = Libros
        #falta poner el campo autor para que funcione bien el formulario
        fields = [
            'title', 'resume', 'idioma',
        ]

        labels = {
            'title': 'Título', 'resume': 'Resumen', 'idioma': 'Idioma',
        }

        widgets = {
            'title': forms.TextInput(attrs={'class': 'form-control'}),
            'resume': forms.TextInput(attrs={'class': 'form-control'}),
            'idioma': forms.Select(attrs={'class': 'form-control'}),
        }


class forAutor(forms.ModelForm):

    class Meta:
        model = Autor
        fields = ['nombre', 'nacionalidad', 'edad']
        labels = {'Nombre': 'nombre', 'Nacionalidad': 'nacionalidad', 'Edad': 
'edad'}
        widgets = {
            'nombre': forms.TextInput(attrs={'class': 'form-control'}),
            'nacionalidad': forms.TextInput(attrs={'class': 'form-control'}),
            'edad': forms.NumberInput(attrs={'class': 'form-control'}),
        }


*Vista*

class addAutorXlibro(CreateView):


    model = Libros
    template_name = 'biblioteca/add-libros-autor.html'
    form_class = forLibros
    second_for_class = forAutor
    success_url = reverse_lazy('inicio_app:index')

    def get_context_data(self, **kwargs):
        context = super(addAutorXlibro, self).get_context_data(**kwargs)
        if 'form' not in context:
            context['form'] = self.form_class(self.request.GET)
        if 'form2' not in context:
            context['form2'] = self.second_for_class(self.request.GET)
        return context

    def post(self, request, *args, **kwargs):
        self.object = self.get_object()
        form = self.form_class(request.POST)
        form2 = self.second_for_class(request.POST)
        if form.is_valid() and form2.is_valid():
            libro = form.save(commit=False)
            libro.autor = form2.save()
            libro.save()
            return HttpResponseRedirect(self.get_success_url())
        else:
            return self.render_to_response(self.get_context_data(form=form, 
form2=form))



*Plantilla*

{% block contenido %}
    <form method="post"> {% csrf_token %}
        {{ form2.as_p }}
        <div>-------</div>
        {{ form.as_p }}
        <button class="btn btn-primary" type="sumit">Guardar</button>
    </form>
{% endblock %}


*url*

path('add-libros-autor', views.addAutorXlibro.as_view(), 
name="add-libros-autor"),


El formulario se pinta bien, pero cuando ingreso los datos y doy clic en 
guardar me sale este error:

AttributeError at /add-libros-autor

Generic detail view addAutorXlibro must be called with either an object pk or a 
slug in the URLconf.


Me está pidiendo un parámetro en la url. Si por ejemplo le paso un /1 , 
todo me funciona bien. Lo que quiero saber, es porqué siempre me pide ese 
parámetro o si hay una forma de que el formulario funcione sin tener que 
poder ese /1.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/429871d5-7c1e-4a00-a0c7-a60ec1809d50%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to