Django 含有外键模型新增数据以及序列化
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")
另外一个例子,测试没问题的
class Merchant(models.Model):
name = models.CharField(max_length=200, verbose_name='商家名称', null=False)
address = models.CharField(max_length=200, verbose_name='商家地址', null=False)
logo = models.CharField(max_length=200, verbose_name='商家logo', null=False)
class GoodsCategory(models.Model):
name = models.CharField(max_length=20, verbose_name='分类名称')
merchant = models.ForeignKey(Merchant, on_delete=models.CASCADE)
python manage.py shell
>>> merchant1=Merchant.objects.get(pk=45)
>>> GoodsCategory.objects.create(name="独特夜宵",merchant=merchant1)
<GoodsCategory: GoodsCategory object (324)>
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"]
努力生活,融于自然
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
2022-12-09 把字符串格式的UTC时间,转为北京时间
2022-12-09 自定义分页样式