代码之家  ›  专栏  ›  技术社区  ›  Srikar Appalaraju Tonetel

Django模型(1054,“字段列表”中的未知列)

  •  33
  • Srikar Appalaraju Tonetel  · 技术社区  · 14 年前

    不知道为什么会出现这个错误。以下是我创建的模型-

    from django.db import models
    from django.contrib.auth.models import User
    
    class Shows(models.Model):
        showid= models.CharField(max_length=10, unique=True, db_index=True)
        name  = models.CharField(max_length=256, db_index=True)
        aka   = models.CharField(max_length=256, db_index=True)
        score = models.FloatField()
    
    class UserShow(models.Model):
        user  = models.ForeignKey(User)
        show  = models.ForeignKey(Shows)
    

    这是我访问这些模型的视图-

    from django.http import HttpResponse
    from django.template import Context
    from django.template.loader import get_template
    from django.http import HttpResponse, Http404
    from django.contrib.auth.models import User
    
    def user_page(request, username):
        try:
            user = User.objects.get(username=username)
        except:
            raise Http404('Requested user not found.')
    
        shows     = user.usershow_set.all()
        template  = get_template('user_page.html')
        variables = Context({
            'username': username,
            'shows'   : shows})
        output = template.render(variables)
        return HttpResponse(output)
    

    操作错误:(1054,“未知列”appname_usershow.show\u id'在'字段列表'')

    9 回复  |  直到 14 年前
        1
  •  28
  •   Inception Inception    14 年前

    syncdb

    您可能需要删除所有表,然后运行 同步数据库

        2
  •  16
  •   Srikar Appalaraju Tonetel    5 年前

    正如@inception所说,我的表架构已经改变了&正在运行 syncdb 未更新已创建的表。

    不更改(如更新/修改)实际表。所以我放弃了相关的DB&ran 在空数据库上。现在可以了。:)

    对于其他人, SOUTH Django的数据迁移工具似乎是最受欢迎的选择。它似乎提供了django模型和; 没有达到目标。必须退房。。。

    2019年9月29日更新 :从Django 1.7向上,迁移内置到Django的核心。如果您运行的是以前较低版本的Django,您可以在上找到存储库 BitBucket

        3
  •  6
  •   Srikanth Chundi    14 年前

    检查数据库中是否存在该字段。如果您更改模型并执行syncdb,它将不会更新数据库,我不确定是否是这样。

    另一方面,Django提供了使用get\u object\u或\u404替换代码中try/except块的快捷方式。(可在django.com快捷方式)

    try:
         user = User.objects.get(username=username)
    except:
         raise Http404('Requested user not found.')
    

    可以更改为:

    user = get_object_or_404(User, username=username)
    
        4
  •  4
  •   Ni Xiaoni    11 年前

    我遇到了同样的问题:

    首先,快跑

    manage.py sqlall [appname]
    

    你可以发现:

    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    

    ALTER TABLE tb_realtime_data ADD id integer AUTO_INCREMENT NOT NULL PRIMARY KEY FIRST;
    

    然后就成功了。

    我认为django将添加名为id的列本身。

    为方便起见,每个模型都有一个名为id的自动递增主键字段,除非您在字段上显式指定primary\u key=True(请参阅附录a中标题为AutoField的部分)。

    你可以点击 here

        5
  •  2
  •   Yurkol    10 年前

    primary_key = True
    
        6
  •  1
  •   slajma jamesmfriedman    6 年前

    检查数据库,你很可能错过了 show_id appname_usershow 桌子。

    当您更改或添加字段但忘记运行迁移时,可能会发生这种情况。

    ForeignKey 你的模特。 按照上面的例子:

    class UserShow(models.Model):
        # some attributes ...
        show = models.ForeignKey(Show, models.DO_NOTHING)
    
        class Meta:
            managed = False
            db_table = 'appname_departments'
    
        7
  •  1
  •   Zubair Hassan    4 年前

    1. 通过workbench手动将列添加到数据库中,其名称与错误消息中显示的名称完全相同。

    2. 在那之后,在命令下面运行

    python manage.py makemigrations
    

    现在将成功创建迁移

    1. 在那之后,在命令下面运行
    python manage.py migrate --fake
    

    现在一切正常,没有任何数据丢失问题

        8
  •  1
  •   AwsAnurag    4 年前

    我正在使用DB模型开发Django restapi。当我在现有模型中添加一个新列时(该列从一开始就存在于db表中),我收到如下错误: “字段列表”中的“未知列”,列名>“已执行”。

    我错过的是将模型迁移到数据库。

    1. py-3型管理.py生成迁移 从这里开始,如果没有其他错误,它应该是直接的。

    2. py-3型管理.py迁移

    在调用restapi时执行这些步骤之后,它们工作正常。

        9
  •  0
  •   pravish    11 年前

    我为我的应用程序创建了一个模型文件,然后做了几个 sqlall 当我整理桌子的时候。我做的一个改变就是 primary_key=True syncdb . 添加了一个伪值,并尝试使用 User.objects.all() User 做我的模范班。虽然这样做很好,但在打印 all() DatabaseError: (1054, "Unknown column 'polls_user.id' in 'field list'")

    令人惊讶的是,我试过了,而且可以通过打另一个电话来解决这个问题 同步数据库 . 我记得在整个练习过程中,当我通过mysql命令行客户机检查id列时,从来没有在表中看到过它。

        10
  •  0
  •   keverly    7 年前

    ModelSerializer

        11
  •  0
  •   user12250631    5 年前

    PS F:\WebApp>python管理.py生成迁移 您正在尝试在没有默认值的情况下将不可为null的字段“price”添加到目标;我们无法这样做(数据库需要一些内容来填充现有行)。 请选择修复程序: 1) 现在提供一个一次性默认值(将在所有现有行上对此列设置空值) 选择一个选项:2 PS F:\WebApp>python管理.pySQLTRAvello 0001迁移

    开始;

    --创建模型目标

    创建表 travello_destination id 整数自动递增非空主键, name varchar(100)不为空, img desc longtext不为空, offer bool不为空); PS F:\WebApp>python管理.py生成迁移 “Travelo”的迁移: Travelo\migrations\0002\u目的地_价格.py PS F:\WebApp>python管理.py迁移 要执行的操作: 运行迁移: 正在应用travello.0002\u目的地\u价格。。。好的

        12
  •  0
  •   Juan Diego Lozano    4 年前

    我在使用多个组合主键时遇到了这个问题 VarChar table_set.all() 查询集。 Django想要一个 table_name_id 对于这个查询集的PK列,没有一个,所以它抛出了这个错误。 我通过手动创建 并将其设置为自动递增的整数PK列,而不是复合PK。 然后我详细说明了这些 瓦尔查尔 unique_together

        13
  •  -2
  •   misybing    7 年前

    直接的解决方案是删除文件夹../Project/App/migrations下的文件,避免此问题的方法是创建新的databaes表列,而不是更改现有的databaes表列。