首页 > 解决方案 > 如何在 django rest 框架中手动将外键添加到序列化程序?

问题描述

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

这是我的分支视图集的创建功能:

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

我该如何解决这个问题?

标签: djangodjango-rest-frameworkdjango-serializer

解决方案


您只需要排除company序列化程序类中的字段Meta

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

另外,我建议使用权限来防止视图中的 UnAuthorized 请求。


推荐阅读