¿장고에서 ContentType을 사용하시겠습니까?

¿Sabías que Django lleva un registro de cada uno de los modelos que creas para tu proyecto en un modelo llamado ContentType? Sigue leyendo para aprender al honoro.

¡Perdón por tardar tanto en escribir! 그는 Frontity 블로그에서 프론트엔드를 점유하고 있으며, Wordpress에서 React의 프레임워크를 사용하지 않고 새로운 부서에서 작업을 시작합니다. Quizás hable un poco al honoro de Frontity en alguna entrada futura. Por ahora continuemos con el tema.

Antes de empezar, si no tienes ninguna idea de para que sirve Django visita mi entrada donde hablo sobre uno de los mejores libros para comenzar con Django. Si ya에는 Django anteriormente, sigamos adelante가 있습니다.

ContentType 및 모델 로스



ContentTypes es un modelo especial de Django que registra cada uno de los modelos que existen dentro de nuestra aplicación, tanto los que nosotros creamos, como los que vienen instalados por defector.

Para probar vamos a crear un projecto de django, con un modelo:

Primero creemos un entorno virtual con pipenv. Si no sabes como se usa pipenv puedes visitar mi entrada donde hablo de Pipenv.

pipenv shell


Una vez en nuestro entorno virtual, instalemos Django

pipenv install django


Creemos un proyecto:

django-admin startproject videogameStore
cd videogameStore


새로운 앱을 만들려면 새로운 앱을 사용하세요.

django-admin startapp videogame
cd videogame


Ya que tenemos nuestra aplicación, habrá que crear un modelo, y, como ya te mencioné, Django automáticamente registrará ese modelo en su aplicación ContentType.

Lo primer que haremos será abrir nuestro archivo models.py y editar el contenido

from django.db import models

# Create your models here.

class Videogame(models.Model):
    name = models.CharField(max_length=256)
    created = models.DateTimeField(auto_now_add=True)
    modified    = models.DateTimeField(auto_now=True)


Hay que recordar agregar nuestra app recien creada a nuestro archivo settings.py

INSTALLED_APPS = [
    ...,
    'videogame'
]


Creamos las migraciones y las ejecutamos. Django에서 ContentTypes를 사용하여 마이그레이션할 수 있습니다.

python3 manage.py makemigrations
Migrations for 'videogame':
  videogame/migrations/0001_initial.py
    - Create model Videogame
python3 manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, videogame
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
...


ContentType에 등록된 모델을 등록하는 경향이 있습니다. Vamos a corroborarlo directo desde la shell de Django.

python manage.py shell


터미널에서 ContentType 모델로 가져올 수 있습니다.

Justo como cualquier otro modelo, podemos usar su ORM para obtener los datos de los modelos.

Cada objecto del modelo ContentType tendrá una propiedad llamada app_label, y otra model, las cuales son el nombre de la aplicación y el nombre del modelo, 각각의 모델.

from django.contrib.contenttypes.models import ContentType
ContentType.objects.get(app_label='product', model="product")
<ContentType: videogame | videogame>


기본적으로 get_for_model 방법을 사용하는 모델에서 ContentType 지시의 인스턴스에 액세스할 수 있는 방법이 있습니다.

from videogame.models import Videogame
ContentType.objects.get_for_model(Product)
<ContentType: videogame | videogame>


Django의 ContentType 모델 외



Como ya sabes, cada entrada de una tabla tiene un identificador único, la id, mira lo que pasa si accedemos al id de la instancia que acabamos de crear.

ContentType.objects.get(app_label='product', model="product").id
7


예를 들어, ContentType 앱에 등록된 모델을 등록할 수 있습니다. Averigüemos cuales 아들.

>>> ContentType.objects.get(id=1)
<ContentType: admin | log entry>
ContentType.objects.get(id=2)
<ContentType: auth | permission>
ContentType.objects.get(id=3)
<ContentType: auth | group>
ContentType.objects.get(id=4)
<ContentType: auth | user>


Como ya mencioné, cada una de las apps instaladas de manera predeterminada cuentan con sus modelos 각각의.

¿Para que sirve ContentType?



ContentType sirve para relacionar modelos con otros modelos, como si fuera una foreign key (llave foránea), pero con la ventaja de que el tipo de modelo con el cual lo relacionemos puede ser diferente para cada entrada de la tabla.

Imagínate una sencilla red social, donde tenemos diferentes tipos de contenido; un modelo para videos, un modelo para imágenes y un modelo para textos. ContentType nos permite crear un modelo que haga referenciar a cualquiera de nuestros tres modelos de una manera sencilla.

Si quieres ahondar más en el tema por favor revisa la documentación oficial de Django.

좋은 웹페이지 즐겨찾기