[英]Django model wont migrate using a OneToOne field
When I try to run migrate my new models using python manage.py migrate
, I get the following error: 当我尝试使用
python manage.py migrate
运行迁移新模型时,出现以下错误:
AssertionError: OneToOneField() is invalid.
AssertionError:OneToOneField()无效。 First parameter to ForeignKey must be either a model, a model name, or the string 'self'
ForeignKey的第一个参数必须是模型,模型名称或字符串“ self”
This is my models.py
: 这是我的
models.py
:
class Server_DefaultChannel():
channel_id = models.BigIntegerField(default=0)
name = models.CharField(default='undefined', max_length=32)
channel_type = models.IntegerField(default='-1')
class Server_Inviter(models.Model):
avatar = models.CharField(default='undefined', max_length=64)
discriminator = models.IntegerField(default=0)
inviter_id = models.BigIntegerField(default=0)
username = models.CharField(default='undefined', max_length=32)
class Server_Guild(models.Model):
features = ArrayField(models.CharField(default = 'undefined', max_length = 64))
icon = models.CharField(default = 'undefined', max_length = 64)
guild_id = models.BigIntegerField(default=0)
name = models.CharField(default = 'undefined', max_length = 128)
splash = models.CharField(default = 'undefined', max_length = 64)
description = models.CharField(default = 'undefined', max_length = 256)
vanity_url = models.CharField(default = 'undefined', max_length = 128)
class Discord_Server(models.Model):
approximate_member_count = models.IntegerField(default=-1)
approximate_presence_count = models.IntegerField(default=-1)
server_defaultchannel = models.OneToOneField(Server_DefaultChannel, on_delete=models.PROTECT, null=True)
code = models.CharField(max_length=32)
server_guild = models.OneToOneField('migratefire.Server_Guild', on_delete=models.PROTECT, null=True)
server_inviter = models.OneToOneField('migratefire.Server_Inviter', on_delete=models.PROTECT, null=True)
server_tags = ArrayField(models.CharField(default='none', max_length=16))
last_checked = models.DateTimeField(default=0)`
I've tried putting the app name in the meta field for each class, I've tried using strings instead and got this error: 我尝试将应用程序名称放在每个类的meta字段中,尝试使用字符串代替并出现以下错误:
ERRORS: migratefire.Discord_Server.server_defaultchannel: (fields.E300) Field defines a relation with model 'migratefire.Server_DefaultChannel', which is either not installed, or is abstract.
错误:migrationfire.Discord_Server.server_defaultchannel:(fields.E300)字段定义了与模型'migratefire.Server_DefaultChannel'的关系,该关系未安装或为抽象。 migratefire.Discord_Server.server_defaultchannel: (fields.E307) The field migratefire.Discord_Server.server_defaultchannel was declared with a lazy reference to 'migratefire.server_defaultchannel', but app 'migratefire' doesn't provide model 'server_defaultchannel'.
migratefire.Discord_Server.server_defaultchannel:(fields.E307)声明了migratefire.Discord_Server.server_defaultchannel字段,并带有对“ migratefire.server_defaultchannel”的惰性引用,但应用程序“ migratefire”未提供模型“ server_defaultchannel”。
Please help, I have no idea why other code examples work and not mine. 请帮助,我不知道为什么其他代码示例可以正常工作,而不是我的。
I solved my own problem, I seemed to have forgot to pass the models.Model
parameter in the Server_DefaultChannel
class declaration: 我解决了自己的问题,似乎忘了传递
Server_DefaultChannel
类声明中的models.Model
参数:
class Server_DefaultChannel(models.Model):
channel_id = models.BigIntegerField(default=0)
name = models.CharField(default='undefined', max_length=32)
channel_type = models.IntegerField(default='-1')
Resulted in a successful migration. 导致成功迁移。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.