Django 含有外鍵模型新增數據以及序列化


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"]

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM