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 django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
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