django 插入库表时如何添加many-to-many字段数据

创建对象时,多对多字段不能直接通过下面的方式处理:

from .models import Blog, Author, User


author = Author.objects.get(id=1)
users = User.objects.filter(id__in=(2, 3, 4))
# 这样直接写过不了,会报错: Direct assignment to the forward side of a many-to-many set is prohibited
Blog.objects.create(
    author=author,
    likes=users   
)

在创建表时就添加多对多数据的话,可通过下面的方式来处理: 

from .models import Blog, Author, User


author = Author.objects.get(id=1)
users = User.objects.filter(id__in=(2, 3, 4))
# 这样直接写过不了,会报错: Direct assignment to the forward side of a many-to-many set is prohibited
blog = Blog.objects.create(
    author=author   
)
# create的时候不写many to many 字段,写完后单独设置这些字段就可以了
blog.likes.set(users)

参考:  https://stackoverflow.com/questions/50015204/direct-assignment-to-the-forward-side-of-a-many-to-many-set-is-prohibited-use-e 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django 中使用 Serializer 对象进行查询时,可以通过自定义字段来扩展原有的字段。一种常见的实现方式是使用 SerializerMethodField,该字段可以接受一个方法作为参数,并返回该方法的返回值作为该字段的值。 下面是一个示例代码,假设我们有一个名为 Book 的模型,其中包含 title 和 author 两个字段。我们想要添加一个自定义字段 full_name,表示书籍的完整名称(包含作者名字和书名): ```python from rest_framework import serializers from myapp.models import Book class BookSerializer(serializers.ModelSerializer): full_name = serializers.SerializerMethodField() class Meta: model = Book fields = ('title', 'author', 'full_name') def get_full_name(self, obj): return f"{obj.title} by {obj.author}" ``` 在上面的代码中,我们定义了一个名为 full_name 的自定义字段,并将其添加到了 fields 列表中。在 get_full_name 方法中,我们使用 obj 参数获取当前序列化的 Book 实例,并返回一个字符串,表示该实例的完整名称。 现在,当我们使用该序列化器进行查询时,会自动加上 full_name 字段,比如: ```python from myapp.models import Book from myapp.serializers import BookSerializer books = Book.objects.all() serializer = BookSerializer(books, many=True) print(serializer.data) ``` 输出结果如下: ``` [ {"title": "The Great Gatsby", "author": "F. Scott Fitzgerald", "full_name": "The Great Gatsby by F. Scott Fitzgerald"}, {"title": "To Kill a Mockingbird", "author": "Harper Lee", "full_name": "To Kill a Mockingbird by Harper Lee"}, ... ] ``` 可以看到,full_name 字段已经成功地添加到了序列化器的输出结果中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值