对表“ knox_authtoken”的插入或更新违反了外键约束“ knox_authtoken_user_id_e5a5d899_fk_auth_user_id”

时间:2020-10-11 01:37:14

标签: python django django-rest-framework django-rest-knox

我正在为我的react和django项目构建Crud API,但遇到一些问题:

django.db.utils.IntegrityError: insert or update on table "knox_authtoken" violates foreign key constraint "knox_authtoken_user_id_e5a5d899_fk_auth_user_id"
DETAIL:  Key (user_id)=(11) is not present in table "auth_user".

因此,我可以看到正在创建用户模型,但没有创建AuthToken。我该如何解决?

`AuthToken.objects.create(user)` NOTE - This line is raising the exception!

我的models.py

# Create your Winteka custom models here.
class Users(AbstractBaseUser):

    public_id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True, blank=False, null=False, max_length=36)
    username = models.CharField(max_length=50, unique=True, null=False, blank=False)
    email = models.EmailField(max_length=100, unique=True, null=False, blank=False)
    profile_pic = models.ImageField(null=False, blank=False, default='def_profile_pic.png')
    password = models.CharField(max_length=128, null=False, blank=False)
    
    verified = models.BooleanField(null=False, blank=False, default=False)

    reports = models.ManyToManyField('main.UserReports', related_name='+')

    date_registered = models.DateTimeField(auto_now_add=True)

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['public_id', 'email', 'profile_pic', 'password', 'verified', 'reports', 'date_registered']

我的viewset.py

# Register Viewset
class RegisterAPI(generics.GenericAPIView):
    serializer_class = RegisterUserSerializer

    def post(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        user = serializer.save()
        return Response({
            "user": UserSerializer(user, context=self.get_serializer_context()).data,
            "token": AuthToken.objects.create(user)
        })

还有我的Serializer.py

# Register Serializer
class RegisterUserSerializer(serializers.ModelSerializer):

    class Meta:
        model = Users
        fields = ('username', 'email', 'password')
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        user = Users(
            username=validated_data['username'],
            email=validated_data['email'],
            password=Users.create_password(None, validated_data['email'])
        )
        user.save()
        return user

在django-rest-framework和Knox上我真的很环保,我以前有一些以前的序列化程序在该项目中可以使用,但是不包括Knox。

0 个答案:

没有答案