Estoy trabajando en una aplicación de Django pero parece que es solo una pregunta de Python, sin nada necesariamente específico de Django. Soy bastante nuevo en Python, y es difícil de describir lo que estoy tratando de hacer, pero más fácil mostrar así que aquí va:¿Cómo aplicar genéricamente una sustitución de una función para mutiple clases en python?
tengo una clase:
class SlideForm(ModelForm):
class Meta:
model = Slide
cual subclase:
class HiddenSlideForm(SlideForm):
def __init__(self, *args, **kwargs):
super(HiddenSlideForm, self).__init__(*args, **kwargs)
for name, field in self.fields.iteritems():
field.widget = field.hidden_widget()
field.required = False
y luego tengo otra clase:
class DeckForm(ModelForm):
def __init__(self, *args, **kwargs):
# do some stuff here
return super(DeckForm, self).__init__(*args, **kwargs)
class Meta:
model = Deck
# other stuff here
que también sub-clase:
class HiddenDeckForm(DeckForm):
def __init__(self, *args, **kwargs):
super(HiddenDeckForm, self).__init__(*args, **kwargs)
for name, field in self.fields.iteritems():
field.widget = field.hidden_widget()
field.required = False
Tenga en cuenta que las subclases tienen exactamente el mismo código que los nombres de clase y hacen exactamente lo mismo. He estado tratando de averiguar cuál es la mejor manera de genéricos para poder mantenerlo SECO y usarlo fácilmente para otras clases, y he considerado decoradores y/o herencias múltiples, los cuales son conceptos nuevos para mí, pero sigue mezclándose.
¡Ayuda se aprecia!
(Como nota adicional, no dude en señalar cualquier problema que usted vea en mi código Django :))
Pregunta quizás debería pedir una forma de resolver el problema para que no implique la incrustación de muchos campos ocultos en el formulario. –
Gracias por la sugerencia, John. Publicó una pregunta por separado que describe el escenario en el que estoy usando esto. http://stackoverflow.com/questions/6054124. Siéntase libre de publicar una respuesta si tiene algunas ideas. Me encantaría descubrir cómo implementar esto de una manera más limpia. –
+1 para encontrar un error en mi respuesta; Ahora sé más acerca de Python también! – SingleNegationElimination