Python Django REST框架:创建令牌时出现完整性错误
我想使用名为Account的自定义用户模型为每个新用户生成一个令牌。但是,authtoken\u令牌表似乎有一个外键,默认用户表名为auth\u user。这会产生以下完整性错误: 下面是我如何在models.py中生成新令牌的方法:Python Django REST框架:创建令牌时出现完整性错误,python,django,django-rest-framework,django-authentication,Python,Django,Django Rest Framework,Django Authentication,我想使用名为Account的自定义用户模型为每个新用户生成一个令牌。但是,authtoken\u令牌表似乎有一个外键,默认用户表名为auth\u user。这会产生以下完整性错误: 下面是我如何在models.py中生成新令牌的方法: @receiver(post_save, sender=Account) def create_auth_token(sender, instance=None, created=False, **kwargs): if created:
@receiver(post_save, sender=Account)
def create_auth_token(sender, instance=None, created=False, **kwargs):
if created:
Token.objects.create(user=instance)
按照REST框架文档的建议,我在身份验证应用程序的初始迁移中添加了所需的_by属性:
class Migration(migrations.Migration):
dependencies = [
]
needed_by = (
('authtoken', '0001_initial'),
)
operations = [
migrations.CreateModel(
name='Account',
fields=[
('id', models.AutoField(primary_key=True, verbose_name='ID', auto_created=True, serialize=False)),
('password', models.CharField(verbose_name='password', max_length=128)),
('last_login', models.DateTimeField(null=True, verbose_name='last login', blank=True)),
('username', models.CharField(unique=True, max_length=40)),
('is_admin', models.BooleanField(default=False)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
],
options={
'db_table': 'tbl_authentication_account',
},
),
]
然而,即使这样也无济于事。在数据库中手动更改外键后,令牌成功生成,但身份验证测试仍然失败
有人能指出我在迁移中可能犯了什么错误吗?您在settings.py中设置了AUTH\u USER\u模型了吗?看起来您可能在执行此操作之前已经运行了迁移并创建了rest framework令牌表。因此,用户外键指向内置的用户模型。是否确实要使用自定义模型?您的帐户模型看起来与内置用户非常相似。使用自定义模型会使事情复杂化。它看起来像是从令牌到用户表的关系。。。我同意@Alasdair的观点:AUTH_USER_模型没有正确设置。谢谢你的回答。实际上,我在settings.py文件的底部声明了AUTH_USER_模型。在Alasdair的建议下,我决定使用默认用户模型,这确实使事情变得更简单。
class Migration(migrations.Migration):
dependencies = [
]
needed_by = (
('authtoken', '0001_initial'),
)
operations = [
migrations.CreateModel(
name='Account',
fields=[
('id', models.AutoField(primary_key=True, verbose_name='ID', auto_created=True, serialize=False)),
('password', models.CharField(verbose_name='password', max_length=128)),
('last_login', models.DateTimeField(null=True, verbose_name='last login', blank=True)),
('username', models.CharField(unique=True, max_length=40)),
('is_admin', models.BooleanField(default=False)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
],
options={
'db_table': 'tbl_authentication_account',
},
),
]