2010-11-24 14 views
8

¿Es posible redefinir un modelo utilizado en INSTALLED_APP sin modificar la aplicación en cuestión? Por ejemplo, django-basic-blog tiene un modelo de publicación al que me gustaría agregarle un campo. Podría editar django-basic-blog directamente, pero para la portabilidad de código me gustaría construir sobre eso. No quiero hacer una subclase porque quiero conservar todas las referencias existentes al modelo de publicación. ¡Gracias por adelantado!¿Cómo sobrescribir los modelos definidos en las aplicaciones instaladas en Django?

Respuesta

11
  1. Si subclase, los campos originales seguirán almacenados en la tabla original, por lo que las referencias seguirán siendo válidas.

  2. Si desea mono-parche de una clase existente, que en su mayoría no es el método sucio recomendable, se podría utilizar contribute_to_class en algún archivo models.py que será cargada en una aplicación después de la que desea modificar:

models.py:

from django.db.models import CharField 
from blog.models import Post 
CharField(max_length="100").contribute_to_class(Post, 'new_field') 

Si lo haces de esta manera, siempre hay que desnudar el riesgo de que los cambios pueden chocar con otras piezas de código y que su código será más difícil de mantener!

+0

¡Excelente respuesta! Sería bueno si proporcionaras un ejemplo para 1. también;) – Jannis

Cuestiones relacionadas