我在MongoDB中使用Django-nonrel。我的序列化程序与我的数据库数据有关。这里有在MongoDB中嵌套DictField的Django REST框架
class info(models.Model):
price = DictField(EmbeddedModelField('data')
class data(models.Model):
field_vol = models.PositiveIntegerField()
我已经在Django壳测试我的模型和串类,并与将数据存储到数据库中(不序列化或反序列化)的作品。存储在数据库中的数据显示为这样:
{
_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'的筛选相关,但没有发现。请问我该怎么做才能让序列化程序在内部字典中搜索键和值?
**密钥名称,即'20121230'不是固定密钥名称,它根据输入日期而增加。
我设法在外壳序列化的数据,这里是结构:
infoSerial:
price = dataSerial():
field_vol = IntegerField()
然而,当我得到的infoSerial.data,它,因为它正在搜索field_vol但是我有个约会失败在此字段之前键入。
另一个测试自己:我曾尝试到价格字段修改成这样子:
price = DictField(DictField(EmbeddedModelField('data')))
这看起来比我以前的一个更合法的,因为实际的存储包含嵌套的字典。但是,错误脱落时,我收到infoSerial:
AttributeError: 'float' object has no attribute 'pop'
我真的相信,在外部字典的键名不通过这个功能。我真的需要在dataSerial上做一个lambda表达式,我该怎么做?
感谢您的建议,但是,因为我有多个价格数据要存储到数据库中,所以设置id字段对我来说不会有用。 我已经想过使用List存储Dict项目,但是当我需要获取特定日期的数据时它并不高效。 – DrKNa
我并不是建议你改变存储格式。但是,您可以在data/validated_data和mongodb之间编写一些粘合代码来填补空白。 – Linovia
我目前正在研究.to_representation()函数,看看我是否可以对零件进行一些重写。但是,我想知道是否有其他方式根据返回的数据获取键和值。 – DrKNa