如何在django rest框架中手动向序列化器添加外键?

问题描述 投票:0回答:1

创建分支时,我想根据所请求用户的公司添加公司的ID(外键)。基本上我只想在序列化程序级别添加公司ID。

这是我的branchViewset的创建功能:

def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data, context=context)
        if serializer.is_valid(raise_exception=True):
            serializer.save(company=request.user.owner)

这是我的序列化器:

class CreateBranchSerializer(serializers.ModelSerializer):
    user = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())

    def validate(self, attrs):
        try:
            user = self.context['request'].user
        except:
            raise CustomAPIException(status_code=status.HTTP_401_UNAUTHORIZED,
                                     error_code='1006')
        return attrs

但是在创建分支时出现错误:

 company: field is required

我该如何解决?

django django-rest-framework django-serializer
1个回答
0
投票

您只需要在串行器的company类中排除Meta字段:

class CreateBranchSerializer(serializers.ModelSerializer):
    ...
    class Meta:
         ...
         exclude = ['company']

此外,我建议使用permissions防止views中的未经授权的请求。

© www.soinside.com 2019 - 2024. All rights reserved.