我有一个名为Voter的模型。我想使用Django身份验证进行身份验证。所以我添加了OneToOneField。我正在使用this教程。
但是当我添加波纹管时,应用了makemigrations
和migrate
并尝试获取Voter对象,然后生成错误
user = models.OneToOneField(User, on_delete=models.CASCADE)
以前,我认为我在扩展用户方面做错了。但是现在阅读stackoverflow中的其他答案似乎是因为未应用迁移。
代码 model.py(partial)
class Voter(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE) # this line map voter with user but it produce error
serial_voter_id = models.AutoField(primary_key=True)
voter_id = models.CharField(unique=True, max_length=10)
voter_name = models.CharField(max_length=255)
voter_constituency = models.ForeignKey(Constituency, models.DO_NOTHING, blank=True, null=True)
username = models.CharField(unique=True, max_length=32)
password = models.TextField()
voter_address = models.CharField(max_length=255, blank=True, null=True)
area = models.CharField(max_length=10, blank=True, null=True)
city = models.CharField(max_length=10, blank=True, null=True)
pincode = models.IntegerField(blank=True, null=True)
adhar_no = models.BigIntegerField(unique=True)
birth_date = models.DateField()
age = models.IntegerField()
fingerprint = models.TextField(blank=True, null=True)
authenticity = models.CharField(max_length=3, blank=True, null=True)
wallet_id = models.TextField()
class Meta:
managed = False
db_table = 'voter'
migrations / 0001_initial.py中的迁移条目
migrations.CreateModel(
name='Voter',
fields=[
('serial_voter_id', models.AutoField(primary_key=True, serialize=False)),
('voter_id', models.CharField(max_length=10, unique=True)),
('voter_name', models.CharField(max_length=255)),
('username', models.CharField(max_length=32, unique=True)),
('password', models.TextField()),
('voter_address', models.CharField(blank=True, max_length=255, null=True)),
('area', models.CharField(blank=True, max_length=10, null=True)),
('city', models.CharField(blank=True, max_length=10, null=True)),
('pincode', models.IntegerField(blank=True, null=True)),
('adhar_no', models.BigIntegerField(unique=True)),
('birth_date', models.DateField()),
('age', models.IntegerField()),
('fingerprint', models.TextField(blank=True, null=True)),
('authenticity', models.CharField(blank=True, max_length=3, null=True)),
('wallet_id', models.TextField()),
],
options={
'db_table': 'voter',
'managed': False,
},
),
它产生的错误是
OperationalError at /admin/poll/voter/
(1054, "Unknown column 'voter.user_id' in 'field list'")
Request Method: GET
Request URL: http://127.0.0.1:8000/admin/poll/voter/
Django Version: 3.0.2
Exception Type: OperationalError
Exception Value:
(1054, "Unknown column 'voter.user_id' in 'field list'")
Exception Location: /home/vishvajeet/Desktop/Programming/django/environment/django/lib/python3.6/site-packages/MySQLdb/connections.py in query, line 239
Python Executable: /home/vishvajeet/Desktop/Programming/django/environment/django/bin/python
Python Version: 3.6.9
Python Path:
['/home/vishvajeet/Desktop/Programming/django/environment/election',
'/usr/lib/python36.zip',
'/usr/lib/python3.6',
'/usr/lib/python3.6/lib-dynload',
'/home/vishvajeet/Desktop/Programming/django/environment/django/lib/python3.6/site-packages']
Server time: Tue, 31 Mar 2020 05:03:53 +0000
我搜寻了voter.user_id,但是没有找到任何文件。我阅读了this的答案,并认为这是因为迁移不适用,并且我们还可以看到OneToOneField的条目不在迁移文件中。
我正在使用 的Django == 3.0.2 mysqlclient == 1.4.6
我在mysql中创建了数据库,然后使用this
在django中使用了它答案 0 :(得分:0)
运行python manage.py showmigrations
时,是否已选中所有复选框,还是没有选中一个或多个[x]?
例如,这表明没有运行迁移
(venv) bash-3.2$ python manage.py showmigrations
admin
[ ] 0001_initial
[ ] 0002_logentry_remove_auto_add
[ ] 0003_logentry_add_action_flag_choices
auth
[ ] 0001_initial
[ ] 0002_alter_permission_name_max_length
[ ] 0003_alter_user_email_max_length
[ ] 0004_alter_user_username_opts
[ ] 0005_alter_user_last_login_null
[ ] 0006_require_contenttypes_0002
[ ] 0007_alter_validators_add_error_messages
[ ] 0008_alter_user_username_max_length
[ ] 0009_alter_user_last_name_max_length
[ ] 0010_alter_group_name_max_length
[ ] 0011_update_proxy_permissions
contenttypes
[ ] 0001_initial
[ ] 0002_remove_content_type_name
sessions
[ ] 0001_initial
这是所有迁移都已应用的时间:
(venv) bash-3.2$ python manage.py showmigrations
admin
[X] 0001_initial
[X] 0002_logentry_remove_auto_add
[X] 0003_logentry_add_action_flag_choices
auth
[X] 0001_initial
[X] 0002_alter_permission_name_max_length
[X] 0003_alter_user_email_max_length
[X] 0004_alter_user_username_opts
[X] 0005_alter_user_last_login_null
[X] 0006_require_contenttypes_0002
[X] 0007_alter_validators_add_error_messages
[X] 0008_alter_user_username_max_length
[X] 0009_alter_user_last_name_max_length
[X] 0010_alter_group_name_max_length
[X] 0011_update_proxy_permissions
contenttypes
[X] 0001_initial
[X] 0002_remove_content_type_name
sessions
[ ] 0001_initial
如果需要针对尚未应用的特定迁移,则可以运行以下命令: 可以说会话需要运行
python manage.py migrate sessions 0001_initial
这会将特定的迁移应用于数据库。您是否遇到其他错误?