2011-12-20 9 views
5

Tengo una función genérica que itera sobre _meta.fields de un objeto determinado. Todos los nombres de campo y valores se obtienen correctamente, excepto para los campos ManyToMany. Parece ignorar por completo los campos ManyToMany. ¿Cómo recuperamos los fks de los campos m2m?manytomany campos no visibles en _meta.fields

def myfunc(self) 
    for field in self._meta.fields: 
     type = field.get_internal_type() 
     name = field.name 
     val = getattr(self,field.name) 

Respuesta

15

Ellos están en self._meta.many_to_many

0

Si desea obtener todos los nombres de campo en un modelo. No necesita usar self._meta.many_to_many + self._meta.fields.

Puede simplemente usar [field.name for field in model._meta.get_fields()].

Tenga en cuenta que get_fields devolverá todos los campos (incluyendo muchos-a-muchos y clave externa)

get_fields

Django:

def get_fields(self, include_parents=True, include_hidden=False): 
    """ 
    Returns a list of fields associated to the model. By default, includes 
    forward and reverse fields, fields derived from inheritance, but not 
    hidden fields. The returned fields can be changed using the parameters: 

    - include_parents: include fields derived from inheritance 
    - include_hidden: include fields that have a related_name that 
         starts with a "+" 
    """ 
Cuestiones relacionadas