Herramientas de usuario

Herramientas del sitio


wiki2:python:django:models

¡Esta es una revisión vieja del documento!


Django Models

Signals

Ways to connect signals

class Award(models.Model):
    name = models.CharField(max_length=200, unique=True)
    ...
 
    @classmethod
    def pre_save(cls, sender, instance, **kwargs):
        ...
 
pre_save.connect(Award.pre_save, sender=Award)
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
 
class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    bio = models.TextField(max_length=500, blank=True)
    location = models.CharField(max_length=30, blank=True)
    birth_date = models.DateField(null=True, blank=True)
 
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)
 
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    instance.profile.save()

Model configuration

Modelos proxy

Proxy models are used to modify Python behaviour of a model by extending a model class. Database tables aren't generated for proxy models. So you can't use a proxy model for AUTH_USER_MODEL.

class Badge(models.Model):
    name = ...
    color = ... # gold/silver


class GoldBadge(Badge)
    class Meta:
        proxy = True

    def award(self, user):
        # award a gold badge to user

class SilverBadge(Badge):
    class Meta:
        proxy = True

    def award(self, user):
        # award a silver badge to user

Fields

Image Field

Model:

cover = models.ImageField(null=True)

Template:

{% if object.cover %}
<img src="{{ object.cover.url }}"></img>
{% endif %}

Config:

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

Urls:

from django.contrib.staticfiles.urls import static
from django.conf import settings
 
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Special fields

id = models.UUIDField(primary_key=True, default=uuid4, help_text="Unique ID for this particular video")

Fields configuration

Choice

import calendar
 
...
 
class MyModel(models.Model):
    ...
 
    MONTH_CHOICES = [(str(i), calendar.month_name[i]) for i in range(1,13)]
 
    month = CharField(max_length=9, choices=MONTHS_CHOICES, default='1')

How to...

Get an app model

from django.apps import apps
apps.get_model('users', 'BaseUser')
wiki2/python/django/models.1539418262.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)