[Django Rest Framework序列化程序验证一个通过但在另一个上失败

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

这是我目前拥有的:

models.py:

class Team(models.Model):
    label = models.CharField(max_length=128, unique=True)

    def __str__(self) -> str:
        return self.label


class AppName(models.Model):
    label = models.CharField(max_length=128, unique=True)

    def __str__(self) -> str:
        return self.label

serializers.py

class TeamSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Team
        fields = [
            'id',
            'label'
        ]
class AppNameSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = AppName
        fields = [
            'id',
            'label'
        ]

这是我的功能:

    appname = AppNameSerializer(data={'label': request.POST.get('appname')})
    if appname.is_valid():
        appname = appname.save()

    team = TeamSerializer(data={'label': request.POST.get('team')})
    if team.is_valid():
        team = team.save()

其中request.POST.get('appname')为'foo-name',request.POST.get('team')为'Chocobo Knights'

为什么appname.is_valid()抛出无效?而team.is_valid()通过了吗?它们实际上是相同的代码,我很困惑。

TeamSerializer(data={'label': 'Chocobo Knights'}):
    id = IntegerField(label='ID', read_only=True)
    label = CharField(max_length=128, validators=[<UniqueValidator(queryset=Team.objects.all())>]) True
AppNameSerializer(data={'label': 'foo-app'}):
    id = IntegerField(label='ID', read_only=True)
    label = CharField(max_length=128, validators=[<UniqueValidator(queryset=AppName.objects.all())>]) False
django django-rest-framework
1个回答
0
投票

您的序列化程序验证取决于数据库的状态。

代码可能是相同的,但是如果Team表中已经有一个“ Chocobo Knights”,而AppName没有任何“ foo-app”……不要期望两者都得到相同的结果!

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