Django REST Framework生成Swagger文档报错:序列化器ref_name冲突
解决DRF Swagger生成时的Serializer ref_name冲突错误
错误信息
drf_yasg.errors.SwaggerGenerationError: Schema for <class 'api.serializers.UserSerializer'> would override distinct serializer <class 'djoser.serializers.UserSerializer'> because they implicitly share the same ref_name; explicitly set the ref_name attribute on both serializers' Meta classes
问题原因
drf-yasg默认以序列化器类名作为ref_name(用于Swagger文档的Schema唯一标识),当不同模块的序列化器隐式共享相同ref_name时就会触发冲突。你已给CustomUserSerializer和CustomDjoserUserSerializer指定了唯一ref_name,但MyUserCreateSerializer继承的Djoser原生UserCreateSerializer未显式设置ref_name,导致和Djoser内部序列化器产生命名冲突。
解决方案
给MyUserCreateSerializer的Meta类添加唯一ref_name,确保所有涉及的序列化器都有不重复的标识:
# Djoser authentication imports from djoser.serializers import UserCreateSerializer from djoser.serializers import UserSerializer as DjoserUserSerializer from rest_framework import serializers from django.contrib.auth.models import User # Djoser user serializer class MyUserCreateSerializer(UserCreateSerializer): class Meta(UserCreateSerializer.Meta): fields = ['id', 'username', 'password', 'email', "first_name", "last_name"] ref_name = 'MyUserCreate' # 新增唯一标识,避免冲突 # Changed the serializer name to CustomUserSerializer class CustomUserSerializer(serializers.ModelSerializer): class Meta(object): model = User fields = ['id', 'username', 'password', 'email'] ref_name = 'ApiUser' # Using a different name for custom Djoser user serializer class CustomDjoserUserSerializer(DjoserUserSerializer): class Meta(DjoserUserSerializer.Meta): ref_name = 'CustomDjoserUser'
额外检查:确认项目视图或其他模块中无残留的旧UserSerializer类引用,确保所有使用的序列化器都是你重命名后的版本。
内容的提问来源于stack exchange,提问作者Nsikan Patrick
相关产品推荐
相关产品推荐

