Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

222
Vistas
¿Cuál es la forma correcta de usar ayudantes para ampliar la funcionalidad en los modelos de Django?

Estoy agregando algunas funcionalidades extendidas a mis modelos en Django. Para no sobrecargar la interfaz raíz del modelo (y el archivo), estoy usando algunos ayudantes como atributos del modelo.

Lo que quiero es agrupar los métodos y propiedades en estos ayudantes, y lo que quiero es algo como:

 class Product(models.Model): downloads = DownloadsHelper() # .... pass p = Product.objects.first() p.downloads.files_count(p) p.downloads.reset_permissions(p) # ...

Para no tener que pasar la instancia al ayudante cada vez, podría usar otro enfoque.

 class Product(models.Model): def __init__(self, *args, **kwargs): super(Product, self).__init__(*args, **kwargs) self.downloads = DownloadsHelper(self) self.shipping = ShippingHelper(self) p = Product.objects.first() p.downloads.files_count p.downloads.reset_permissions()

Y finalmente, una forma más genérica/conceptual de Python para hacer esto sería como:

 class Helper: def __init__(self, helped): self.helped = helped class Helper1(Helper): attribute_name = 'helloing' def hola(self): print("hola") class Helper2(Helper): attribute_name = 'goodbying' def chau(self): print("chau") class Helped: def __init__(self): self._install_helpers() def _install_helpers(self): for helper in self.helpers: setattr(self, helper.attribute_name, helper(self)) class MyHelped(Helped): helpers = [Helper1, Helper2] h = MyHelped() h.helloing.hola() h.goodbying.chau()

Y la pregunta es: ¿Es este último enfoque una forma correcta/una buena práctica para hacer las cosas desde un punto de vista pythonic-OOP y "Djangoid". ¿Tiene esto algún problema?

¡Gracias por leer!

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Tal vez no mostraste la complejidad total de tus métodos, pero por lo que mostraste podría simplificarse un poco.

Podría usar la herencia "directa/simple", y si tiene muchos métodos, para la organización, tal vez podría prefijar los nombres de los métodos con h1_ y h2_ para indicar de qué clase de ayuda son:

 from django.db import models class Helper1: def h1_hola(self): print("hola") class Helper2: def h2_chau(self): print("chau") class MyHelped(Helper1, Helper2, models.Model): pass h = MyHelped() h.h1_hola() h.h2_chau()

¿Este enfoque más simple sería suficiente para sus necesidades específicas?

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda