这是我目前拥有的:
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
您的序列化程序验证取决于数据库的状态。
代码可能是相同的,但是如果Team表中已经有一个“ Chocobo Knights”,而AppName没有任何“ foo-app”……不要期望两者都得到相同的结果!