亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

django序列化時(shí)使用外鍵的真實(shí)值操作

 更新時(shí)間:2020年07月15日 11:31:24   作者:tmpbook  
這篇文章主要介紹了django序列化時(shí)使用外鍵的真實(shí)值操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

展示:

一般情況下序列化得到的外鍵的內(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對多

我要先序列化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解析

在寫接口的時(shí)候,大家都離不開對query結(jié)果集的序列化

嗯嗯嗯,一般我們都有DRF里面的序列化工具,但是django原生的serialize你們有

用過嗎?????????????

上代碼:

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í)值操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論