wake-up-neo.com

Django Models (1054, "Unbekannte Spalte in" Feldliste "")

Keine Ahnung, warum dieser Fehler auftaucht. Hier sind die Modelle, die ich erstellt habe -

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)

Hier ist die Ansicht, von der ich auf diese Modelle zugreife - 

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)

An dieser Stelle bekomme ich einen Fehler - 

OperationalError: (1054, "Unbekannte Spalte 'appname_usershow.show_id' in 'Feldliste'")

Wie Sie sehen, ist diese Kolumne nicht einmal in meinen Modellen vorhanden? Warum dieser Fehler?

32

Wie @inception mitteilte, hatte sich mein Tabellenschema geändert und ausgeführt. syncdb hat bereits erstellte Tabellen nicht aktualisiert.

Anscheinend ändern Änderungen an den Modellen die aktuellen Tabellen nicht, wenn sie durch syncdb aktualisiert werden (wie beim Aktualisieren/Ändern). Also legte ich die entsprechende Datenbank ab und lief syncdb auf leere Datenbank. Jetzt funktioniert es gut. :) 

Für andere scheint SOUTH Datenmigrationstool für Django die bevorzugte Option zu sein. Es scheint Optionen zu bieten, auf die die Django-Modelle & syncdb zurückgreifen. Muss auschecken ...

13

vielleicht wurde Ihr Tabellenschema geändert? Durch die Ausführung von syncdb werden bereits erstellte Tabellen nicht aktualisiert.

Möglicherweise müssen Sie alle Tabellen löschen und anschließend syncdb erneut ausführen. Denken Sie auch daran, Ihre Daten zu sichern !!

27
Inception

Normalerweise bekomme ich dies, wenn ich versuche, auf ein Feld zuzugreifen, das in der Datenbank nicht vorhanden ist.

Prüfen Sie, ob das Feld in der Datenbank vorhanden ist. Wenn Sie das Modell ändern und syncdb ausführen, wird die Datenbank nicht aktualisiert. Ich bin nicht sicher, ob dies der Fall ist. 

Andernfalls bietet Django eine Verknüpfung zum Ersetzen des try/except-Blocks in Ihrem Code mithilfe von get_object_or_404. (verfügbar in Django.shortcuts)

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

kann geändert werden in:

user = get_object_or_404(User, username=username)
5
Srikanth Chundi

Ich habe die gleichen Probleme getroffen:

Erster Lauf 

manage.py sqlall [appname]

und Sie können finden:

`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,

und ich füge das Kolonnenhandbuch hinzu:

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

und dann hat es funktioniert.

Ich denke, Django wird die Spalte namens id selbst hinzufügen.

Der Einfachheit halber erhält jedes Modell ein Feld mit automatischem Inkrementieren des Primärschlüssels namens id, sofern Sie nicht explizit primary_key = True für ein Feld angeben (siehe Abschnitt "AutoField" in Anhang A).

sie können auf here klicken, um Details zu erfahren.

Viel Glück.

3
Ni Xiaoni

Im entsprechenden Feld explizit setzen

primary_key = True
2
RdB

Dies ist eine ziemlich alte Frage, aber Sie könnten das Folgende trotzdem nützlich finden: Überprüfen Sie die Datenbank. Vermutlich fehlt Ihnen show_id in der appname_usershow-Tabelle.

Dies kann auftreten, wenn Sie ein Feld ändern oder hinzufügen, die laufende Migration jedoch vergessen.

OR

Wenn Sie auf eine nicht verwaltete Tabelle zugreifen und versuchen, eine ForeignKey zu Ihrem Modell hinzuzufügen . Befolgen Sie das obige Beispiel:

class UserShow(models.Model):
    # some attributes ...
    show = models.ForeignKey(Show, models.DO_NOTHING)

    class Meta:
        managed = False
        db_table = 'appname_departments'
1
slajma

Ich habe eine Modelldatei für meine App erstellt und anschließend einige sqlall vorgenommen, während ich meine Tabellen verfeinerte. Eine der von mir vorgenommenen Änderungen bestand darin, primary_key=True in eines meiner Felder zu setzen. Am Ende forderte syncdb. Fügte einen Dummy-Wert hinzu und versuchte, darauf zuzugreifen, wobei User.objects.all(), User meine Modellklasse ist. Obwohl dies einwandfrei funktioniert hat, trat dieser Fehler beim Drucken der Liste auf, die vom Aufruf all() zurückgegeben wurde. Es lautete DatabaseError: (1054, "Unknown column 'polls_user.id' in 'field list'")

Überraschenderweise versuchte ich es mit einem weiteren Aufruf von syncdb. Ich erinnere mich, dass ich die id-Spalte in der Tabelle zu keinem Zeitpunkt während der Übung gesehen habe, als ich sie über den mysql-Befehlszeilen-Client durchgesehen habe.

0
pravish

Ich habe diese Fehlermeldung erhalten, als ich versuchte, Django Rest Framework-Serialisierer zu verwenden. Stellen Sie sicher, dass Sie, wenn Sie über einen Serializer verfügen, der die Unterklassen ModelSerializer enthält, alle Änderungen an den Modellen migrieren, bevor Sie Ihre Serialisiererklassen schreiben (oder einfach alles kommentieren, was mit dem Serialisierer zu tun hat, migrieren und dann auskommentieren). 

0
keverly