我在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