Django外键序列化一些笔记

Django外键序列化一些笔记

  • 第一种:一对一
  • 第二种:一对多

第一种:一对一

比如现在有model表:

 # models.py
class Build(models.Model):
    name = models.CharField(max_length=255)

class Box(models.Model):
    build = models.ForeignKey(Build, models.DO_NOTHING)
    name = models.CharField(max_length=255)

一个建筑有很多个箱子
那么我想这个Box的序列化的json带着他的主Build。
那么我们只需要在serializers.py里编写的时候加上

class BoxSerializer(serializers.ModelSerializer):
  build_id = serializers.CharField(source='build.id',read_only=True)
  build_name = serializers.CharField(source='build.name',read_only=True)
  class Meta:
      model = Box
      fields = '__all__'

记得新添的build_idbuild_name后面带上read_only=True
那么显示出来的json就会是带着的它的主(Build)的了

第二种:一对多

比如现在我有一个表:画师painter,然后又有一个表:作品product。现在我想要一个画师带着他们各自的作品的json。

 # models.py
class Painter(models.Model):
    openid = models.CharField(max_length=255,primary_key=True)
    name = models.CharField(max_length=255)
    
class Product(models.Model):
    painter = models.ForeignKey(Painter,models.CASCADE,related_name='products')
    url = models.CharField(max_length=255)

那么我们需要记得在Product的外键字段painter上加上一个related_name,这里我们填products(自己起名)

然后在serializers.py文件里,新建一个PainterProductSerializer,并且加上字段products(刚刚起的名字)

class PainterProductSerializer(serializers.ModelSerializer):
    products = ProductSerializer(many=True,read_only = True)
    class Meta:
        model = Painter
        fields = '__all__'

那么之后序列化的时候每个json里的画家就会带上他们的所有作品

你可能感兴趣的:(后端,django,python,后端)