No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso Básico de Django

Curso Básico de Django

Facundo García Martoni

Facundo García Martoni

Creando los modelos Question y Choice

11/29
Recursos

Aportes 25

Preguntas 9

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

En el curso viejo de Django, un estudiante aportó una mejor forma para mantener una organización con las aplicaciones en el archivo settings y ahora se los recomiendo a ustedes. Hasta la fecha lo sigo usando.

DJANGO_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)

THIRD_APPS = (
    'jazzmin',
)

LOCAL_APPS = (
    'polls',
)


INSTALLED_APPS = THIRD_APPS + DJANGO_APPS  + LOCAL_APPS

Este Facundo es fenomenal, de lo bien que explica lo digo.

Quizás el profe más adelante lo explique, pero si ya quieren ver cómo les quedaron las tablas pueden descargarse DB Browser.
Solo hay que abrir el programa, arrastrar el archivo db.sqlite3 a la ventana del programa de Database Structure. Las tablas que nos interesan son polls_choice y polls_question. Doble click y listo.

DateTimeField permite agregar 2 parametros que son muy utiles para manejar marcas de tiempo

  • auto_now: que actualiza la fecha despues de cada modificacion
    *auto_now_add: guarda la fecha de creación del dato

este ultimo parametro es muy util para lo que queremos hacer ya que nos quita el trabajo de tener que guardar la fecha nosotrosmismos, la contraparte es que si nosotros queremos meter una fecha la va a ignorar
si queremos usar esta caracteristica quedaria asi la clase question

class Question(models.Model):
    question_text = models.CharField(max_length = 200)
    pub_date = models.DateTimeField(auto_now_add = True)

Les comparto un fragmento de la doc de Django que me llamó la atencion.

You should think of migrations as a version control system for your database schema. makemigrations is responsible for packaging up your model changes into individual migration files - analogous to commits - and migrate is responsible for applying those to your database.

Si ya tienes una base de datos creada y quieres generar los modelos puedes usar

python manage.py inspectdb

después de haber configurado tu base de datos en el archivo settings y te generara el código, es mágico en verdad y te ayuda mucho.

Utilizo DataGrip de Jetbrains para gestionar todas las Base de Datos tanto SQL como NoSQL. Les dejo el diagrama que genera luego de ejecutar el comando migrate

Este son mis valores de INSTALLED_APPS en un proyecto real que estoy haciendo, un aporte adicional es importante cuidarse de la dependencias de nuestras aplicaciones, ya que sino la colocamos en el orden correcto puede ocasionarnos un error.

Espero que sea útil y se animen a crear su propias aplicaciones.

DJANGO_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django_countries',
)

THIRD_APPS = (
    'rest_framework',
    'corsheaders',
)

LOCAL_APPS = (
    'apps.base',
    'apps.authentication', # Dependencies: [base]
    'apps.inventory', # Dependencies: [base]
    'apps.coupon', # Dependencies: [base]
    'apps.notification', # Dependencies: [base]
    'apps.promotion', # Dependencies: [base]
    'apps.purchase', # Dependencies: [base]
    'apps.contact', # Dependencies: [base]
    'apps.invoice', # Dependencies: [base, contact]
    'apps.accounting', # Dependencies: [base, contact invoice]
    'apps.tax', # Dependencies: [base, contact, accounting]
    'apps.payment', # Dependencies: [base, contact, invoice]
    'apps.sale', # Dependencies: [base, contact, invoice, coupon]
    'apps.website', # Dependencies: [base]
    'apps.ecommerce', # Dependencies: [base, contact, website, invoice, coupon]
)

py manage-py makemigrations polls Crea un archivo “migration/001_initial-py” en el que django automaticamente describe toda la creación de las tablas en las BD, uso del concepto ORM

py manage-py migrate Tomar el archivo creado y ejecutarlo en la BD. “Applying polls.001_initial”

Para quienes usan VScode y quieran visualizar las tablas de la base de datos sqlite3, les recomiendo instalar la extension de VScode llamada: SQLite

Hacer migraciones de una aplicación:

	-	 python manage.py makemigrations polls

Hacer migraciones de todas las aplicaciones:

-	 python manage.py makemigrations

Correr migraciones

-	python manage.py migrate

Hey algunos de ustedes habra notado que cuando entran al archivo “models” en la primera linea "from django.db… esta marcado como un error con linea amarilla.

Esto pasa porque Visual Studio no esta reconociendo el entorno virtual por lo que tienen que hacer los pasos mencionados en esta pagina para arreglarlo.

Pagina: https://flaviocopes.com/error-unable-import-django-db/

Choices va en singular, por lo que seria:

Class Choice(models.Model):

Comandos de la clase:

  • py manage.py makemigrations 'nombre_de_la_app' -> Django describe toda la creación de las tablas de las BBDD.
  • py manage.py migrate -> Django toma el archivo creado con el comando anterior y lo ejecuta en la BBDD.

si aun caso se presento un error a la hora de hacer la migración como me paso a mi y les salia: ImportError: No module named ‘Tkinter’

primero revisen su version de python en este caso yo uso python3.10.

Simplemente ejecuten este comando: sudo apt-get install python3.10-tk

Que genial!

Que fundamental que fue esta clase. ¡Disfruntenla!

Esto es magia? Como que haciendo POO estás creando tablas en una DB 😮 Sorprendente

Estoy usando Kite en VSCode y me aterra lo mucho que predice que voy a escribir, al parecer estas variables y demás son muy utilizadas, incluso a modo de ejemplo

makemigrations es como llevar tu estructura bd de django a sqlite3. Es increible que con un comando el backend y la bd hablen el mismo idioma

si les sale un erro como este borre el (length= 300 )

Al hacer cambios en sus modelos o **crear **un nuevo modelo (en models .py).

  • Ejecute el comando:
 python manage .py makemigrations 

para crear migraciones para esos cambios

  • Ejecute el comando:
python manage .py migrate

para aplicar esos cambios a la base de datos.

No voy ni por la mitad del curso y ya quiero calificar con 5 🌟🌟🌟🌟🌟

Yo solo la agregué así y funcionó, pero no se si sea una mala práctica.