2017-10-06 5 views
0

Je reçois tous les champs d'un modèle MyModel._meta.get_fields() puis je les traite et je veux comprendre lequel d'entre eux a été ajouté par moi-même et lequel par django. Par exemple si j'ai la classe Moovie et la classe Comédie qui ont moovie = models.ForeignKey(Moovie, on_delete=models.CASCADE), quand j'obtiendrai les champs Moovie._meta.get_fields() le champ moovie sera aussi dans cette liste, et si d'autres modèles lient au modèle Moovie, le champ de film sera dans la liste plusieurs fois. J'ai besoin de les sauter.Comprendre les relations dans les champs des modèles django

Répondre

0

Ok, désolé, c'est ma réponse

def field_name(field, ModelClass=None): 
    if hasattr(field, 'field') and 'get_attname_column' in dir(field.field): 
     return field.field.get_attname_column()[0] 
    if 'get_attname_column' in dir(field): 
     return field.get_attname_column()[0] 

    field = field.field if hasattr(field, 'field') else ModelClass._meta.get_field(field.field_name) 
    return field.get_attname_column()[0] 

def checkClassHasField(modelClass, field): 
    name = field_name(field) 
    try: 
     modelClass._meta.get_field(name) 
     return True 
    except Exception: 
     return False 

Je MyModel._meta.get_fields() filtrer la liste par cette fonction. Cependant peut-être la meilleure façon existe ...