【发布时间】:2015-11-04 01:53:48
【问题描述】:
我在 MongoDB 中使用 Django-nonrel。我的数据库数据在序列化程序上有问题。这是我的模型和序列化程序类
class info(models.Model):
price = DictField(EmbeddedModelField('data')
class data(models.Model):
field_vol = models.PositiveIntegerField()
我已经在 Django shell 中进行了测试,它可以将数据存储到数据库中(未序列化或反序列化)。存储在数据库中的数据如下所示:
{
_id: blablabla,
price: {
'20121230': {
field_vol: 123
}
}
}
但是,当我尝试使用序列化程序取回数据时,它会在序列化程序中的字段上引发问题。 这是我当前的序列化程序类:
class dataSerial(serializers.ModelSerializer):
class Meta:
model = data
class infoSerial(serializers.ModelSerializer):
data = dataSerial()
class Meta:
model = info
field = ('price')
因为价格包含一个外部字典和一个内部字典。引发的错误与价格中的“field_vol”的 serach 有关,但没有找到。请问我应该如何让序列化程序在内部字典中搜索键和值?
** 键名,即'20121230'不是固定的键名,它根据输入的日期增加。
我设法在shell中获取了序列化数据,这是结构:
infoSerial:
price = dataSerial():
field_vol = IntegerField()
但是,当我获取 infoSerial.data 时,它会失败,因为它正在搜索 field_vol 但是我在此字段之前有一个日期键。
对自己的另一个测试:我尝试将价格字段修改为这种方式:
price = DictField(DictField(EmbeddedModelField('data')))
这看起来比我之前的更合法,因为实际存储包含嵌套的 dict。但是,当我得到 infoSerial 时,错误就消失了:
AttributeError: 'float' object has no attribute 'pop'
我真的相信外部字典中的键名没有通过这个函数。我真的需要在 dataSerial 上做一个 lambda,请问我应该怎么做?
【问题讨论】:
标签: django mongodb serialization django-rest-framework