Django模型因缺少id字段而无法查询?

问题描述 投票:0回答:1

我目前正在为一个discord 机器人开发一个django 项目。我试图解决的问题是我似乎无法查询我的模型之一的数据。

我不清楚的一条信息,我确信导致此问题的是一系列迁移问题,我试图在单独的应用程序中使用与 InventoryInstance 模型的新关系来更新我的角色模型。

当我启动 django shell_plus 会话时 - 尝试查询角色模型时出现此错误:

位于 inventory.models 中

In [1]: Character.objects.all()
Out[1]: OperationalError: no such column: oblivionalchemy_character.inventory_instance_id

这是我的角色和库存实例模型:

位于 oblivionalchemy.models

class InventoryInstance(models.Model):
    character_name = models.ForeignKey('oblivionalchemy.Character', on_delete=models.CASCADE, null=True, related_name="character")
    items = models.JSONField(default=dict)

class Character(models.Model):
    user = models.ForeignKey('discordbot.DiscordUser', on_delete=models.CASCADE, null=True, related_name="characters")
    name = models.CharField(max_length=40)  
    strength = models.IntegerField(default=10)
    endurance = models.IntegerField(default=10)
    agility = models.IntegerField(default=10)
    speed = models.IntegerField(default=10)
    willpower = models.IntegerField(default=10)
    intelligence = models.IntegerField(default=10)
    personality = models.IntegerField(default=10)
    luck = models.IntegerField(default=10)
    alchemy = models.IntegerField(default=10)
    survival = models.IntegerField(default=10)
    blade = models.IntegerField(default=10)
    marksman = models.IntegerField(default=10)
    inventory_instance = models.OneToOneField('inventory.InventoryInstance', on_delete=models.CASCADE, related_name="character", null=True, blank=True)

在另一个模型上创建“上游”依赖关系后,我似乎无法找到一种方法来与这些数据交互以重新创建记录。理想情况下,我希望工作流程顺利进行

Discord用户模型记录已创建 已创建角色模型记录 已创建 InventoryInstance 模型记录。

在创建 DiscordUser 模型之前,我已经有了现有的角色记录。但我不确定我是否理解如何查询这些数据并在对模型进行更改后“掌握所有数据”。谁能帮我理解这里发生了什么?

这是每个应用程序的初始迁移文件:

遗忘化学

class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ('discordbot', '0001_initial'),
        ('inventory', '0001_initial'),
    ]

    operations = [
        migrations.CreateModel(
            name='Character',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=40)),
                ('strength', models.IntegerField(default=10)),
                ('endurance', models.IntegerField(default=10)),
                ('agility', models.IntegerField(default=10)),
                ('speed', models.IntegerField(default=10)),
                ('willpower', models.IntegerField(default=10)),
                ('intelligence', models.IntegerField(default=10)),
                ('personality', models.IntegerField(default=10)),
                ('luck', models.IntegerField(default=10)),
                ('alchemy', models.IntegerField(default=10)),
                ('survival', models.IntegerField(default=10)),
                ('blade', models.IntegerField(default=10)),
                ('marksman', models.IntegerField(default=10)),
                ('inventory_instance', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='character', to='inventory.inventoryinstance')),
                ('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='characters', to='discordbot.user')),
            ],
        ),
    ]

不和谐机器人

class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='User',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('discord_id', models.CharField(blank=True, max_length=100, unique=True)),
            ],
        ),
    ]

库存

class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='InventoryInstance',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('items', models.JSONField(default=dict)),
            ],
        ),
        migrations.CreateModel(
            name='InventoryItem',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=40)),
                ('weight', models.IntegerField(default=0)),
                ('hitpoints', models.IntegerField(default=100)),
                ('is_default', models.BooleanField(default=False)),
                ('effects', models.JSONField(default=inventory.models.default_effects_for_item)),
            ],
        ),
    ]
python django migration
1个回答
0
投票

我发现了这个问题,我试图将 OneToOneField 关系与“下游”模型中的foreignkey字段连接起来,这给我带来了一些问题,我通过简单地在需要该功能的每个模型之间放置 OneToOneField 关系来纠正错误.

© www.soinside.com 2019 - 2024. All rights reserved.