我想使用名为Account的自定义用户模型为每个新用户生成一个令牌。但是,authtoken_token
表似乎具有名为auth_user
的默认用户表的外键。这会产生以下完整性错误:
django.db.utils.IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`db_edibus`.`authtoken_token`, CONSTRAINT `authtoken_token_user_id_56c22f4b_fk_auth_user_id` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`))')
以下是我在models.py中生成新标记的方法:
@receiver(post_save, sender=Account)
def create_auth_token(sender, instance=None, created=False, **kwargs):
if created:
Token.objects.create(user=instance)
根据REST Framework文档的建议,我在“身份验证”应用的初始迁移中添加了“needed_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',
},
),
]
然而,即使这样也无济于事。在数据库中手动更改外键后,成功生成了令牌,但身份验证测试仍然失败。
有人可以指出我可能在迁移中做错了吗?