gpt4 book ai didi

python - 创建时向 django-rest-framework ModelViewSet 添加其他字段的最佳方法

转载 作者:太空狗 更新时间:2023-10-29 19:35:59 25 4
gpt4 key购买 nike

我有一个带有用户(图书所有者)外键的 Book 模型:

class Book(models.Model):
owner = models.ForiegnKey(User)
...

我为 Book 创建了一个 ModelViewSet,它显示了登录用户拥有的书籍:

class BookViewSet(viewsets.ModelViewSet):
model = Book
serializer_class = BookSerializer
def get_queryset(self):
return Book.objects.filter(owner=self.request.user)

现在要创建一本新书,我想用 request.user 保存用户字段,而不是从其他客户端发送的数据(为了更安全)。例如:

def create(self, request, *args, **kwargs):
request.DATA['user'] = request.user
... (some code to create new Book from request.DATA using serialize class)

但是我得到了这个错误:这个 QueryDict 实例是不可变的。 (意味着 request.DATA 是一个不可变的 QueryDict,无法更改)

你知道在使用 django rest 框架创建对象时添加额外字段的更好方法吗?

最佳答案

更新:从 v3 开始,您需要这样做:

def perform_create(self, serializer):
serializer.save(owner=self.request.user)

原理是一样的。


您想将图书序列化程序的 owner 字段设置为只读,然后在 pre_save() 中设置与用户的关联。

类似于:

def pre_save(self, obj):
obj.owner = self.request.user

参见 tutorial section on "Associating Snippets with Users" .

希望对您有所帮助。

关于python - 创建时向 django-rest-framework ModelViewSet 添加其他字段的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18571157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com