【发布时间】:2021-04-10 11:35:37
【问题描述】:
我有以下 Django 模型:
class TCDUser(AbstractUser):
is_change_password = models.BooleanField(_("Cambiar Password?"), default=True)
groups = models.ManyToManyField(Group, default=[], related_name='users', verbose_name=_("Grupos"))
class Meta:
verbose_name = _("Usuario")
verbose_name_plural = _("Usuarios")
def __str__(self):
return "[{}]{}".format(self.pk, self.username)
def save(self):
create = True if self.id is None else False
if create:
self.set_password(self.password)
super(CustomModel).save()
这是序列化程序:
class TCDUserSerializer(CustomModelSerializer):
class Meta:
model = models.TCDUser
fields = ('id','username', 'email', 'first_name', 'last_name', 'is_staff', 'is_active', 'is_superuser', 'password', 'is_change_password', 'groups')
当我向常规 DRF ModelViewSet 发送 POST 时,我收到此异常:
TypeError: Got a `TypeError` when calling `TCDUser.objects.create()`. This may be because you have a writable field on the serializer class that is not a valid argument to `TCDUser.objects.create()`. You may need to make the field read-only, or override the TCDUserSerializer.create() method to handle this correctly.
...
TypeError: save() got an unexpected keyword argument 'force_insert'
如果我去掉调用super(CustomModel).save(),异常就没有了,但是我需要在创建用户的时候设置密码。
【问题讨论】:
标签: django django-models django-rest-framework django-users