Con Django ‘str’ object is not callable en class based-views – python django

Pregunta:


Tengo este problema cuando quiero acceder a una URL que me dice que es str object is no callable seguramente tengo algo mal en las urls o una configuración de esas pero la verdad es que he revisado bien todos los archivos y no entiendo muy por qué se debe este error.

Dejo los códigos que creo estan influyendo en algo del error. Si falta algunos más decirme y lo agrego también. También si pudieran darme una explicación del error para conocer mejor el por qué. Sé que es un dato que python no lo esta leyendo correctamente.

models.py

from django.db import models
from django.forms import ModelForm
from django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    date_of_birthday = models.DateField()
    address = models.TextField()
    phone_number = models.CharField(max_length=11)

    def __str__(self):
        return self.user.first_name

class UserForm(ModelForm):
    class Meta:
        model = UserProfile
        fields = '__all__'

views.py

from django.shortcuts import render

from django.views.generic import CreateView

from .models import UserProfile

class UserCreateView(CreateView):
    model = UserProfile
    template_name = 'userprofiles/user_create.html'
    success_url = '/'
    form_class = 'UserForm'

    def form_valid(self, form):
        form.save()
        return super(UserCreate, self).form_valid(form)

urls.py

from django.conf.urls import url 

from .views import UserCreateView

app_name = "users"
urlpatterns = [
    url(r'^create/', UserCreateView.as_view(), name="user_create"),
]

template

<form action="{% url 'users:user_create' %}" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Crear Usuario</button>
</form>

Si alguno pudiera ayudarme con esto lo agradeceria bastante.

Saludos.

Preguntado por: ikenshu

Gocht

El problema está en el atributo form_class de tu vista UserCreateView.

Cuando se ejecuta la vista, se llama a un método llamado .get_form() en el que se ejecuta una linea similar a esta:

self.form_class(...)

Como ves, crea una instancia de lo que haya en el atributo de clase form_class, como tu tienes ahí un string: 'UserForm' no se puede hacer un llamado (osea instanciarlo con ()) a un string. En su lugar debes importar tu UserForm y colocar la clase como valor en form_class:

from my_app.forms import UserForm  # ruta de ejemplo

class UserCreateView(CreateView):
    model = UserProfile
    template_name = 'userprofiles/user_create.html'
    success_url = '/'
    form_class = UserForm  # sin comillas

    def form_valid(self, form):
        form.save()
        return super(UserCreate, self).form_valid(form)

Fuente

Related Posts:

Python editor extension for laravel-admin
...
DreamFactory(tm) Scripting Components
...
Enhance PHP sprintf with Python-style named parameters
...
Python string slices in PHP
...
Non-standard PHP library (NSPL) – functional primitives toolbox and more
...
PHP client for Celery task queue
...
File Upload widget for jQuery.
...
Abrir páginas web en python 3.5.X en la misma ventana – python python-3.x webbrowser
Pregunta: Buenas, he hecho un script para lanzar varias páginas web en una sola ventana, es decir, cada url en una pestaña sin embargo, firefox ...
Publicar proyecto en Python 3.5 con heroku – python django python-3.x
Pregunta: Hola tengo un proyecto hecho con Python 3.5 y Django 1.10 y quisiera publicarlo en HEROKU pero veo que solo soporta Python 2.7, ¿alguien ...
¿Porqué me sale error csrf verification failed? – django
Pregunta: Esta es mi vista: def validarcelda(request): error = '' success = False if request.method == 'POST': ...
Correcto uso de la app admin de django – python django
Pregunta: Cual es el correcto uso que se le debe dar a la página de administración (django.contrib.admin) en una aplicación en producción. explico mi pregunta. El ...
Cambiar un valor string a un entero – python django ajax
Pregunta: Con el siguiente código quiero hacer una validación donde valide si un dato que voy a ingresar es mayor a otro que ya tengo, ...
Como correr Django en python 3.5 – python python-3.x django
Pregunta: estoy trabajando con Django en python 2.7, para eso hago uso de virtualenv, pip, el conector de mysql, etc. Tengo predefinido python 3.5 en ...
Insertar salto de línea escribiendo en un txt (Python) – python tkinter
Pregunta: Como puedo insertar un salto de línea : archi.write(svnombreRP.get()) Lo hago de la siguientes maneras y no me funciona: No funciona archi.write(svnombreRP.get()'/n') No funciona archi.write(svnombreRP.get()/n) No funciona, me imprime la variable ...
Python elemento IN lista de strings – python python-3.x
Pregunta: tengo la siguiente lista y string: lis = palabra = 'ejemplo' Pero cuando hago palabra in lis Me retorna False. ¿A qué ...

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *