【发布时间】:2021-01-12 17:27:08
【问题描述】:
我是 Django(和 REST 框架)的新手,但我正在努力在保存之前更新一个值。现在我正在使用一个简单的 ModelViewSet 来更新记录。一切正常,但如果我在管理站点中创建项目,则值不会更新。
视图代码如下:
class OauthProviderViewSet(viewsets.ModelViewSet):
queryset = OauthProvider.objects.all()
serializer_class = OauthProviderSerializer
authentication_classes = [SessionAuthentication, BasicAuthentication]
permission_classes = [IsAdminUser]
def perform_create(self, serializer):
changed_credentials = "test" + self.request.credentials
serializer.save(credentials=changed_credentials)
我只想在凭据字段前添加单词 test。
编辑:建议发表一篇文章,解释序列化程序的 create 和模型的 create 函数之间的区别。有趣的是 1. 我不明白其中的区别,但是 2. 他们都没有工作。
EDIT2:用我发现的东西在序列化程序中尝试,一切正常,但我的 sn-p 没有执行:
class OauthProviderSerializer(serializers.ModelSerializer):
class Meta:
model = OauthProvider
#fields = ['id', 'title', 'author']
fields = "__all__"
def create(self, instance, validated_data):
validated_data['credentials'] = "test" + validated_data['credentials']
return super(OauthProviderSerializer, self).create(validated_data)
EDIT3:我发现了问题(部分)。我正在使用管理屏幕来创建值,但该功能不使用视图或序列化程序。如果我使用普通的 POST 方法,我的代码就会被执行。
我对这个功能最好更新 ModelViewSet 的 perform_create 方法是对的吗?根据这个网址:https://simpleisbetterthancomplex.com/tutorial/2019/04/07/how-to-save-extra-data-to-a-django-rest-framework-serializer.html
【问题讨论】:
-
"update a value before save"...你为什么不在序列化器中做事?
-
告诉我怎么做,我会怎么做 :) 就像我说的,我是新人
-
我已经找到了这两个链接,但我对 django 太陌生了,这让我眼花缭乱。我很抱歉。你能提供一个sn-p吗?
标签: django django-rest-framework