我正在为我的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。