2013-05-06 3 views
0

J'ai rencontré ce problème lorsque ma base de données mongo a un champ "type" qui est un mot réservé en Python. Comment puis-je le paramétrer dans Django pour que Django sache que je me réfère au champ Type dans mongo, mais sans rencontrer d'erreur? Merci beaucoup!Comment mapper un nom de champ différent dans le champ django to mongo

# mongo object 
payment: { 
    user = ObjectId("..."), 
    date: ISODate("2013-05-05T23:21:22.802Z"), 
    type: "downgrade" 
    } 

# django 
class Payment(models.Model): 
    user = models.ForeignKey(..) 
    date = models.DateTimeField(default=datetime.datetime.now, null=False)  
    type = models.CharField(blank=False, max_length=30) # <== cannot use type 

Répondre

2

Vous pouvez spécifier le type utilisé dans la base de données avec le db_column field option. Vous devrez utiliser un mot non réservé dans le modèle Payment, mais en spécifiant l'option de champ db_column, vous utiliserez le type correct dans mongo. Par exemple:

class Payment(models.Model): 
    user = models.ForeignKey(..) 
    date = models.DateTimeField(default=datetime.datetime.now, null=False)  
    pay_type = models.CharField(blank=False, max_length=30, db_column="type") 
+0

ah, c'est génial. merci beaucoup Talvalin! – msunbot

0

Si vous utilisez Mongo Engine, db_column ne fonctionnera pas pour vous.

Vous devez le spécifier en utilisant db_field comme spécifié dans http://docs.mongoengine.org/guide/defining-documents.html#field-arguments

Votre échantillon se termineraient:

class Payment(models.Model): 
    user = models.ForeignKey(..) 
    date = models.DateTimeField(default=datetime.datetime.now, null=False)  
    pay_type = models.CharField(blank=False, max_length=30, db_field ="type") 
Questions connexes