Вот что у меня сейчас есть:
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
Является ли это правильным подходом с учетом уникального валидатора БД?
appname = AppNameSerializer(data={'label': request.POST.get('appname')})
if appname.is_valid():
appname = appname.save()
else:
appname = AppName.objects.get(**appname.data)
team = TeamSerializer(data={'label': request.POST.get('team')})
if team.is_valid():
team = team.save()
else:
team = Team.objects.get(**team.data)