Diferencias entre default, null y blank en Django

En este articulo explico las diferencias entre default, null y blank en Django.

Los tipos de campo que emplea Django puedes revisarlos en la explicación de los campos en los modelos en su pagina oficial.

Nul

El campo nulo (Null) cuando posee valor TRUE, permitirá  guardar  valores vacíos como NULL en la base de datos. Su valor por defecto  es False.

Dicho esto, las cadenas vacías siempre se guardarán como cadenas vacías, no como NULL.

Por tanto, lo adecuado es usarlo   para campos que no sean cadenas (fechas, enteros, o booleanos.

Blank

El campo blank cuando es TRUE,  puede dejarse en blanco y por  defecto su valor es False.

Blank se diferencia de Null, porque Blank se emplea en validaciones, mientras Null se emplea en la base de datos.

Si un campo blank es True, la validación en el sitio de Django  permitirá que se añada un campo vacío, sino es asi por el contrario, y  blank=False, el campo será requerido.

Por tanto, considerando lo explicado anteriormente al hablar de Null,  si tenemos datos del tipo booleano, date o entero,  y lo hemos declarado null, es entonces  obligatorio también definirlos como  blank=True .

Ya que esto permitirá si valores vacíos en los formularios

logo django
django

Default

El valor por defecto (default) de un campo, ha de ser llamable  y por tanto si es llamable, se llamará cada vez que un objeto nuevo sea creado.

Resumiendo el concepto del uso de estos seria:

  • Usa «default» para definir el valor que se dará a un campo si tu código no lo define.
  • Usa «blank» para validaciones de formulario. blank=True permite que el campo se deje en blanco.
  • Usa «null» si quieres guardar valores vacíos como NULL en la base de datos.

Espero humildemente, que esto sirva de ayuda a alguien.

«El elefante no necesita decir cuan alto es, le basta con caminar»

NS

TypeError: static() got an unexpected keyword argument ‘document_root’ in Django»

django error

El error typeError: static() got an unexpected keyword argument ‘document_root, puede aparecer, en Django cuando intentamos añadir en nuestro urls.py

+= static(settings.MEDIA_URL, documnet_root=settings.MEDIA_ROOT)

Esta modificación de las urls, la hacemos para decirle a Django, en qué lugar se encuentran nuestros archivos media.

Si nos fijamos en el contenido de nuestro archivo settings.py, debe aparecer la dirección que indica , dónde guardamos nuestros archivos estáticos y en que lugar nuestros archivos tipo media.

Es algo asi

MEDIA_URL = '/media/'
 MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'media')
 STATIC_URL = '/static/' 

Dicho esto, el error ‘TypeError: static() got an unexpected keyword argument ‘document_root‘ puede proceder de diversas fuentes, dos de las que conozco y me resultan más comunes son:

 Importar de modo incorrecto la ruta del método static utilizando:

 from django.templatetags.static import static

cuando deberiamos importar

 from django.conf.urls.static import static   

El primero de ellos nos permite manejar archivos estáticos, como css, javascript o imágenes.

El segundo  es una una función helper que nos devuelve la  url,  donde se encuentra un contenido especifico  y su estructura es:

static.static(prefixview=django.views.static.serve**kwargs)

import *

Si, así es. El segundo error es emplear el uso de import *, que por más que pueda parecer cómodo , me ha traído algún de un dolor de cabeza.

En este articulo pueden ampliar conocimiento sobre sus inconvenientes.

“….El amor siempre empieza soñando y termina en insomnio“

R.Arjona

Modelo para guardar un archivo en Django por fecha

logo django

En este articulo intentaré mostrarte como emplear el modelo para guardar un archivo en Django por fecha, lo cual puede ser muy útil al momento de recuperarlo.

Supongamos que tenemos archivos del tipo fotos y notas

Para lograr tenerlos organizarlos por fecha,  la estructura que debe llevar el modelo, puede ser esta en la que los archivos dentro de la carpeta img o la carpeta nota ordenados en el formato año/mes/dia.

foto = models.ImageField(upload_to = 'img/%Y/%m/%d')
nota = models.FileField(upload_to = 'nota/%Y/%m/%d')

Espero sinceramente, haber ayudado a alguien .

Quien siembre 100 boniatos y diga que sembró 200, tendrá que comerse sus mentiras cuando el boniato se le acabe.

D.

Recuperar una imagen en Django, dinámicamente.

logo django

Veamos como recuperar una imagen en Django, para que Django no la dibuje dinámicamente en función del usuario.

Cuando trabajamos en Django, es común colocar el avatar de nuestro usuario en el panel, si tenemos habilitado nuestro modulo "context_procesor", dentro de templates en nuestro archivo setting.py., podemos seguir las instrucciones siguiente.

Otro Post sobre Django

Como recuperar una imagen en Django dinámicamente.

El código para llamar a nuestra imagen podría ser este:

<img src='{{user.avatar.url }}'
alt="{{user.username }}" 
class="class="img-fluid  user_imag rounded-circle">

Si el modulo no estuviera habilitado debemos incluirlo

TEMPLATES = [
 {
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
        'django.template.context_processors.debug',
        'django.template.context_processors.request',     #modulo
        'django.contrib.auth.context_processors.auth',
        'django.contrib.messages.context_processors.messages',
            ],
         },
      },
]

La magia está, en que el método request(), nos traerá la instancia del user a toda pagina que tengamos, por tanto dispondremos de sus atributos, para el usuario visitante.

Recuperando una imagen en el html

Suponiendo que hemos creado nuestro modelo, nuestro form y nuestras url, podemos recuperar a nuestra imagen con

{% for a in object_list  %} 
<section class="dashboard-header section-padding" style=" border:2px solid blue; margin-bottom:15px;">
  <div class="container-fluid">
    <div class="col-lg-3" >
      <img  src='{{a.profile.photouser.url}}'  alt="{{a.user.username}}" class="img-fluid  user_imag rounded-circle">
    </div> …….
 </section>
 {% endfor %} 
  

…. hay que levantarse cada mañana con una esperanza y dormirse cada noche con una meta….

Espero que sirva de ayuda a alguien

Translate »