You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 05:53:18