[pyar] [Django] Problemas con forms usando django-angular y drf_braces

Tio Oscar tioscar en gmail.com
Mar Sep 6 02:38:12 ART 2016


Bueno esto es algo complicado y supongo (porque no encontré nada) que es un
escenario muy puntual, así que pregunto con la esperanza de que haya
alguien que haya hecho esta combinación, o entienda que puede estar pasando.

Estoy haciendo un site con django-rest-framework y angular desde el
frontend. El sitio ya tenía hecho bastante código que quise reutilizar,
entre esto un par de formularios extensos que no estaban basados en
modelos, así que instalé drf_braces para poder crear Serializers desde
formularios (con FormSerializer).

El problema es cuando intento hacer un Serializer desde un formulario con
mixins de django-angular, mas específicamente con
"NgDeclarativeFieldsMetaclass".

Tiro un ejemplo, si hago:
https://paste.kde.org/pax3ypndf

Funciona la renderización del form correctamente (con los agregados de
django-angular), pero a la hora de hacer post sobre el API, obtengo el
siguiente error:

CharField is not mapped to a serializer field. Please add CharField to
SignupSerializer.Meta.field_mapping. Currently mapped fields:
BooleanField, CharField, ChoiceField, DateField, DateTimeField,
EmailField, IntegerField, MultipleChoiceField, TimeField


Ahora como dije el problema es cuando incluyo NgDeclarativeFieldsMetaclass,
pero si lo quito, dejando:

class SignupForm(
    NgFormValidationMixin,
    NgModelFormMixin,
    forms.Form
):

Anda el serializer, pero el view del form me tira error:

'EmailField' object has no attribute 'get_potential_errors'


Aviso que esto no es un tema específico con EmailField, ya que si lo
comento el error lo lanza con CharField.

Hasta acá supuse que el problema era que NgDeclarativeFieldsMetaclass
reemplazaba los objetos field o algo así, por lo que intenté extender dicha
clase:

class SignupForm(forms.Form):
     # ....

class NgSignupForm(six.with_metaclass(
    NgDeclarativeFieldsMetaclass,
    NgFormValidationMixin,
    NgModelFormMixin,
    SignupForm
)):
    form_name = 'SignupForm'
    scope_prefix = 'SignupData'

Usando SignupForm para el serializer y NgSignupForm para la vista, pero me
tira el mismo error que antes, así que tambien intenté haciendo un clon de
la clase, con el mismo resultado.

Por ahora lo solucioné para salir del paso creando dos classes Form con los
mismos atributos, obviamente es temporal, pero me gustaría saber cual
podría ser la solución mas correcta.

Saludos.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20160906/819e6df7/attachment-0001.html>


Más información sobre la lista de distribución pyar