2013-05-06 2 views
0

Я столкнулся с этой проблемой, когда моя база данных mongo имеет поле типа, которое является зарезервированным словом в Python. Как мне настроить его в Django, чтобы Django знал, что я имею в виду поле Type in mongo, но не запуская ошибки? Спасибо большое!Как сопоставить другое имя поля в поле 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 

ответ

2

Вы можете указать тип, используемый в базе данных с db_column field option. Вам нужно использовать безоговорочное слово в модели Payment, но указание поля db_column будет использовать правильный тип в монго. Например:

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

ах, это является удивительным. спасибо Талвалину! – msunbot

0

Если вы используете Mongo Engine, db_column не будет работать на вас.

Вы должны указать его с помощью db_field, как указано в http://docs.mongoengine.org/guide/defining-documents.html#field-arguments

Ваш образец закончится, как:

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") 
Смежные вопросы