Как избавиться от ошибки "UNIQUE constraint failed: area_student.user_id"?
При попытке создания нового студента выдает ошибку:
IntegrityError at /auth/users/
UNIQUE constraint failed: area_student.user_id
На сколько я понимаю, у меня два раза пытается создать пользователся и проблема в строке
user = UserSerializer.create(UserSerializer(), validated_data=user_data)
Но как мне иначе при создании нового студента связать его с юзером?
Пример кода представлени ниже. Для аутентификации использую djoser.
serializers.py:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username', 'password', 'first_name', 'last_name', 'email')
extra_kwargs = {'password': {'write_only': True}}
def create(self, validated_data):
user = User(
username=validated_data['username'],
first_name=validated_data['first_name'],
last_name=validated_data['last_name'],
email=validated_data['email'],
)
user.set_password(validated_data['password'])
user.save()
return user
class StudentSerializer(serializers.ModelSerializer):
user = UserSerializer(required=True)
class Meta:
model = Student
fields = '__all__'
def create(self, validated_data):
user_data = validated_data.pop('user')
user = UserSerializer.create(UserSerializer(), validated_data=user_data)
student, created = Student.objects.update_or_create(user=user_data,
course=validated_data.pop('course'))
return student
models.py:
class Student(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
course = models.ManyToManyField("Course",
verbose_name='Прослушиваемые курсы')
class Meta:
verbose_name = 'Ученик'
verbose_name_plural = 'Ученики'
def __str__(self):
full_name = f"{self.user.first_name} {self.user.last_name}"
return full_name