django - (1048,“列 'user_id' 不能为空”)与 Django DRF
问题描述
我编写了代码以通过 POST 和 DRF(Django Rest Framework)成功创建新用户,并且我可以正确获取令牌,但是当我尝试 POST(通过 DRF)填充链接到该用户的配置文件时,我得到(1048,“Column 'user_id ' 不能为空")
This is snippets of my code:
for serializers:
class UserSerializer(ModelSerializer):
class Meta:
model = User
fields = ('username','email','first_name','last_name','password')
def create(self, *args, **kwargs):
user = super().create(*args, **kwargs)
p = user.password
user.set_password(p)
user.save()
return user
def update(self, *args, **kwargs):
user = super().update(*args, **kwargs)
p = user.password
user.set_password(p)
user.save()
return user
class ProfileSerializer(ModelSerializer):
class Meta:
model = Profile
fields = ('bio','birth_date','location','country')
def create(self, *args, **kwargs):
profile = super().create(*args, **kwargs)
profile.save()
return profile
def update(self, *args, **kwargs):
profile = super().update(*args, **kwargs)
profile.save()
return profile
and for views:
class ProfileViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
permission_classes = IsAuthenticated,
serializer_class = ProfileSerializer
queryset = Profile.objects.all()
class UserViewSet(viewsets.GenericViewSet,mixins.CreateModelMixin,):
"""
API endpoint that allows users to be viewed or edited.
"""
#permission_classes= (IsAdminUser,)
serializer_class = UserSerializer
queryset = User.objects.all().order_by('-date_joined')
and for models:
@receiver(post_save, sender = settings.AUTH_USER_MODEL)
def create_auth_token(sender,instance=None,created=False, **kwargs):
if created:
Token.objects.create(user=instance)
class Country(models.Model):
iso = models.CharField(max_length = 2,unique = True)
name = models.CharField(max_length = 250)
iso3 = models.CharField(max_length = 6)
phonecode = models.CharField(max_length=6)
def __unicode__(self):
return '%s' % self.name
def __str__(self):
return '%s' % self.name
class Profile(models.Model):
#user = models.OneToOneField(User, on_delete=models.CASCADE,default = "")
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE,default = "")
bio = models.TextField(max_length=100, blank=True)
birth_date = models.DateField(null=True, blank=True)
location = models.CharField(max_length=254, blank=True)
country = models.ForeignKey(Country,on_delete=models.CASCADE,blank=True,null=True)
def __unicode__(self):
return '%s' % self.user
def __str__(self):
return '%s' % self.user
@receiver(post_save, sender=User)
def update_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
instance.profile.save()
当我尝试使用 Postman 并通过令牌进行令牌身份验证时,它可以正确识别令牌但我收到此错误:(1048,“列 'user_id' 不能为空”)与 Django DRF 我感谢您帮助解决这个问题
解决方案
create() 保存到数据库,所以调用函数前需要设置profile.user_id。
推荐阅读
- angular - 文件上传时在生产中违反 Angular 内容安全策略
- typescript - 挂钩 onAdd/onRemove 方法
- batch-file - Bat,如何防止环境变量泄漏到父进程中
- linux - 为 ARM 板交叉编译 QT,配置失败
- html - 在旋转的 div 的背面隐藏文本
- c++ - 从第三方模块复制成员时编写复制构造函数的任何提示被拒绝?
- r - 两个不同数据帧的逐行乘法 dplyr
- jquery - model.JSON 和 metadata.json 中的意外令牌 <
- xml - 使用 xmlstarlet 从 xml 文件中删除节点
- android - ViewModelProvider.Factory 总是返回一个视图模型