Как добавить внешний ключ в сериализатор вручную в django rest framework? - PullRequest
0 голосов
/ 14 апреля 2020

при создании филиала я хочу добавить идентификатор компании (внешний ключ) в соответствии с компанией запрашиваемого пользователя. В основном я хочу добавить идентификатор компании только на уровне сериализатора.

Вот моя функция создания 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

Как мне решить эту проблему?

1 Ответ

0 голосов
/ 14 апреля 2020

Вам просто нужно исключить поле company в классе Meta сериализатора:

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

Кроме того, я предлагаю предотвращать неавторизованные запросы в представлениях с использованием разрешений .

...