Django 原生實現外鍵
class AppleModel(models.Model): id=models.AutoField(primary_key=True) app_name=models.CharField(max_length=50) class PickleModel(models.Model): pid=models.AutoField(primary_key=True) app=models.ForeignKey(to="AppleModel",on_delete=models.CASCADE,related_name="app") color=models.CharField(max_length=20) python manage.py shell app=AppleModel(app_name="iphone") pickle=PickleModel(app=app,color="red")
DRF 實現:
class SerApple(serializers.ModelSerializer): class Meta: model=AppleModel fields = "__all__" class SerPickle(serializers.ModelSerializer): class Meta: model=PickleModel fields = "__all__"
由於主表是Apple ,從表是Pickle,所以必須先創建主表,從表由於包含外鍵,所以如果先創建從表時會報錯 "無效主鍵 “1” - 對象不存在。":
所以外鍵序列化就需要先序列化主表:
現在需求查詢pickle表時想展示對應的外鍵的app的中文名稱在返回響應里,而不是id
需要操刀修改序SerPickle列化器了:
修改后如下:
class SerApple(serializers.ModelSerializer): class Meta: model=AppleModel fields = "__all__" class SerPickle(serializers.ModelSerializer): # source 格式Pickle模型外鍵模型字段名.主表的字段屬性 app_name=serializers.CharField(source="app.app_name",read_only=True) class Meta: model=PickleModel # fields = "__all__" fields = ['app',"color","app_name"]