2017-06-17 2 views
3

Je tables diffrent avec mêmes colonnes CommeComment obtenir le nom de la table du filtre Django objets

class teachers(models.Model): 
    x= models..CharField(max_length=250, blank=True, null=True); 
    y= models..CharField(max_length=250, blank=True, null=True); 

class students(models.Model): 
    x= models..CharField(max_length=250, blank=True, null=True); 
    z= models..CharField(max_length=250, blank=True, null=True); 

J'utilise une fonction à la colonne traiter x des deux tables. Donc, si des valeurs non désirées viennent dans la valeur de x, je dois l'enregistrer avec le nom de la colonne.

Comme f = students.objects.filter()

def validate_x(obj): 
    if obj.x == None: 
     logger.error("None object found in table" + str(obj__tablename)) 
     return False 
    else: 
     return True 

for i in f: 
    validate_result = validate_x(i) 

Mon scénario actuel n'est pas chèque nul. J'ai juste essayé de l'expliquer avec cet exemple. Y a-t-il un moyen d'y parvenir? J'utilise Django 1.6

+0

recevez-vous une erreur? –

+0

Je cherche la syntaxe appropriée pour obtenir l'information de nom de table. Si je donne comme ci-dessus obj__talblename, cela donne une erreur NameError: le nom 'obj__talblename' n'est pas défini – Bamaboy

Répondre

2

object.__class__.__name__ ou object._meta.object_name devrait vous donner le nom du modèle. (si vous avez besoin du nom du modèle). Lorsque vous avez besoin du nom de la table db, vous devez utiliser object._meta.db_table, comme l'a dit arpit-solanki.

2

Utilisez ce pour obtenir le nom de la table de base de données

obj._meta.db_table

This pourrait être utile, mais dans 1,11