django序列化時(shí)使用外鍵的真實(shí)值操作
展示:
一般情況下序列化得到的外鍵的內(nèi)容只是id:
... { fields: { uat_date: "2015-07-25", statu: "CG", name: "慢贏優(yōu)化", tester: [ 1 ], product_manager: 1, module: [ 2, 3 ], project: 1, plan_version: 1, publish_date: "2015-07-25", actual_version: 1, type: "XQ", developer: [ 1 ] }, model: "amazingTable.content", pk: 1 } ...
序列化時(shí)得到外鍵的真實(shí)值:
... { fields: { uat_date: "2015-07-25", statu: "CG", name: "慢贏優(yōu)化", tester: [ [ "kevin" ] ], product_manager: [ "kevin" ], module: [ [ "closewebbus", "我是描述" ], [ "xckhapp", "我是描述" ] ], project: 1, plan_version: 1, publish_date: "2015-07-25", actual_version: 1, type: "XQ", developer: [ [ "kevin" ] ] }, model: "amazingTable.content", pk: 1 } ...
方法:
我序列化的是Content表,它含有一個(gè)外鍵關(guān)聯(lián)的是Module表,1對(duì)多
我要先序列化Module表,然后序列化Content表的時(shí)候才可以使用到Module的真實(shí)值
class ModuleManager(models.Manager): def get_by_natural_key(self, name, description): return self.get(name = name, description = description) class Module(models.Model): objects = ModuleManager() name = models.CharField(max_length=100, unique=True) description = models.CharField(max_length=100, blank=True, null=True) # natual_key的序列化 def natural_key(self): return (self.name, self.description) # natual_keys的解序列化 class Meta: unique_together = (('name', 'description'),)
序列化是否使用真實(shí)值:
jsons = serializers.serialize('json', queryset,use_natural_foreign_keys=False)
jsons = serializers.serialize('json', queryset,use_natural_foreign_keys=True)
附:
如果要給Content表序列化,那么要使用到外鍵的actual_key,要保證外鍵先序列化,如下依賴:
class Content(models.Model): name = models.CharField(max_length=100) ... module = models.ManyToManyField('Module') def natural_key(self): return (self.name,) + self.module.natural_key() # 和"def"同縮進(jìn) natural_key.dependencies = ['example_app.module']
補(bǔ)充知識(shí):django原生的序列化serialize解析
在寫(xiě)接口的時(shí)候,大家都離不開(kāi)對(duì)query結(jié)果集的序列化
嗯嗯嗯,一般我們都有DRF里面的序列化工具,但是django原生的serialize你們有
用過(guò)嗎?????????????
上代碼:
from django.core.serializers import serialize class Test(APIView): def get(self,request): origin_data = Test.objects.all() serialized_data = serialize('json',origin_data) return HttpResponse(serialized_data )
當(dāng)然,再有更便捷的工具的情況下,這種方法并不常用
在有特定需要的時(shí)候,使用這種django原生序列化,還是十分方便的
以上這篇django序列化時(shí)使用外鍵的真實(shí)值操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python?pandas找出、刪除重復(fù)的數(shù)據(jù)實(shí)例
在面試中很可能遇到給定一個(gè)含有重復(fù)元素的列表,刪除其中重復(fù)的元素,下面這篇文章主要給大家介紹了關(guān)于Python?pandas找出、刪除重復(fù)數(shù)據(jù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07Python datetime 格式化 明天,昨天實(shí)例
這篇文章主要介紹了Python datetime 格式化 明天,昨天實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03淺談Python中的可迭代對(duì)象、迭代器、For循環(huán)工作機(jī)制、生成器
這篇文章主要介紹了Python中的可迭代對(duì)象、迭代器、For循環(huán)工作機(jī)制、生成器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03python在回調(diào)函數(shù)中獲取返回值的方法
今天小編就為大家分享一篇python在回調(diào)函數(shù)中獲取返回值的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02Win7上搭建Cocos2d-x 3.1.1開(kāi)發(fā)環(huán)境
現(xiàn)在,越來(lái)越多的公司采用Cocos2d-x 3.0來(lái)開(kāi)發(fā)游戲了,但是現(xiàn)在這樣的文章并不多,所以打算寫(xiě)一系列來(lái)幫助初學(xué)者快速掌握Cocos2d-x 3.0。首先就從開(kāi)發(fā)環(huán)境的大家說(shuō)起吧2014-07-07