When I try to run migrate my new models using python manage.py migrate
, I get the following error:
AssertionError: OneToOneField() is invalid. First parameter to ForeignKey must be either a model, a model name, or the string 'self'
This is my 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:
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. 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'.
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:
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.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.