一对多操作

本文介绍了如何在一对多的关系场景下,处理作者表与图书表之间的关联。通过设置外键author_id,实现图书信息展示时,显示对应作者的名字而非ID。在前端使用Vue进行数据序列化,以更直观地呈现图书及其作者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景:

作者表和图书表(外键author_id)
通过序列化对图书做展示,在vue中展示图书所对应的作者,注意展示作者名字,而不是id
class UserSer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'

class BookSer(serializers.ModelSerializer):
    author_id = UserSer()  # 在这里需要继承
    # 这里的author_id 必须和图书表中的外键名字一样
    class Meta:
        model = Book
        fields = '__all__'


class ShowBook(APIView):
    def get(self,request):
        book = Book.objects.all()
        ser = BookSer(book,many=True)
        return Response({
            'code':200,
            'data':ser.data
        })
<template>
    <div>
      <table border="1">
        <tr>
          <th>标题</th>
          <th>价格</th>
          <th>作者</th>
        </tr>
        <tr v-for="item in datalist">
          <td>{{ item.title }}</td>
          <td>{{ item.price }}</td>
          <td>{{ item.author_id.username }}</td>
        </tr>
      </table>
    </div>
</template>

<script>
  import axios from 'axios'
    export default {
        data(){
          return{
              datalist:[]
          }
        },
      mounted() {
         axios({
              url:'http://127.0.0.1:8000/showbook/',
              method:'get',
            }).then(res=>{
              console.log(res);
              this.datalist = res.data.data;
            })
      }
    }
</script>

<style scoped>

</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值