【发布时间】:2021-10-11 22:26:41
【问题描述】:
我正在为 Auth 编写一个 api。当他们注册时,我有 2 种用户类型( Donors , Charity ),我的数据正在发生变化。所以我需要根据数据更新我的字段。
这是我到目前为止所做的。
views.py
class RegisterView(APIView):
def post(self, request):
js_data = request.data
if 'last_name' in js_data:
#fields = ['id', 'email', 'first_name', 'last_name', 'password']
serializer = UserSerializer(data=js_data)
serializer.is_valid(raise_exception=True)
serializer.save()
else:
#fields = ['id', 'email', 'first_name', 'postcode', 'password']
serializer = UserSerializer(data=js_data)
serializer.is_valid(raise_exception=True)
serializer.save()
在 views.py 中,我尝试从外部 serializers.py 定义字段,但无法将字段作为参数发送。
serializer = UserSerializer(data=js_data, fields = fields) # gives error.
我也试过这个;
serializer = UserSerializer(data=js_data, many= True, fields = fields) # gives error
所以我正在尝试动态创建字段。
serializer.py
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = Users
fields = []
extra_kwargs = {'password': {'write_only': True} }
def create(self, validated_data):
if 'last_name' in validated_data:
self.Meta.fields = ['id', 'email', 'first_name', 'last_name', 'password']
else:
self.Meta.fields = ['id', 'email', 'first_name', 'postcode', 'password']
password = validated_data.pop('password', None)
instance = self.Meta.model(**validated_data)
if password is not None:
instance.set_password(password)
instance.save()
return instance
所以在这里我尝试更改创建函数中的字段。我没有收到错误,但在数据库中我的字段是空的 :( 也许我将 fields = [] 定义为一个空列表,这就是字段为空且不保存任何用户数据的原因。
顺便说一句,我开始学习 django rest。我是这个框架的新手,所以我对任何错误的定义等感到抱歉。
那么有什么想法可以根据数据创建字段吗?提前致谢。祝你有美好的一天。
【问题讨论】:
-
检查this。您可能会发现它很有帮助
-
它真的很有帮助。感谢您的评论,我怎么没看到这个文档。例子。
标签: python django django-rest-framework rest