Problem mit Django-Models

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
klaus
User
Beiträge: 88
Registriert: Samstag 23. Juni 2007, 09:33
Wohnort: Kaufbeuren
Kontaktdaten:

Ich bin gerade dabei Django zu lernen und arbeite mich durch das Django book durch, aber jetzt komme ich nicht weiter. Ich bin gerade in Kapitel 6 und versuche die Admin-Site zu aktivieren, aber bei Punkt 2 kommt immer eine Fehlermeldung. In der Anleitung steht folgendes:
Install the admin models. Simply add "django.contrib.admin" to your INSTALLED_APPS setting and run "python manage.py syncdb" to install the extra tables the admin uses.

Note: When you first ran "syncdb", you were probably asked about creating a superuser. If you didn’t that time, you’ll need to run django/contrib/auth/bin/create_superuser.py to create an admin user. Otherwise you won’t be able to log into the admin interface.
Bei mir kommt folgende Fehlermeldung, wenn ich "python manage.py syncdb" ausführe:
admin.logentry: 'user' has relation with model User, which has not been installed
admin.logentry: 'content_type' has relation with model ContentType, which has not been installed
2 errors found
Außerdem wurde ich nicht gefragt, ob ich einen superuser erstellen will, als ich das erste Mal "python manage.py syncdb" ausgeführt habe.
Könnt ihr mir sagen, was ich machen muss, oder wo ich einen Fehler gemacht habe?
http://klausweidinger.kl.funpic.de
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Naja, eigentlich sind alle deine Fragen in der ersten Fehlermeldung beantwortet worden. Hast du denn die Admin-Seite hinzugefügt? Hast du den Superuser angelegt?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
klaus
User
Beiträge: 88
Registriert: Samstag 23. Juni 2007, 09:33
Wohnort: Kaufbeuren
Kontaktdaten:

Nein, weil ich nicht weiß, wie.
Übrigens, das erste Zitat war keine Fehlermeldung, das war der betreffende Auszug aus dem Django book.
Ich habe 'django.contrib.admin' in den Settings hinzugefügt und es funktioniert trotzdem nicht.
Einen Ordner django/contrib/auth/bin/ gibt es bei mir garnicht, die Datei creat_superuser.py befindet sich direkt im Ordner django/contrib/auth/ .
Wenn ich sie ausführen will, kommt immer ein EnvironmentError.
Ich weiß nicht, was ich sonst noch versuchen soll und es wäre sehr hilfreich, wenn mir jemand erklären könnte, wie ich dieses Problem löse.
http://klausweidinger.kl.funpic.de
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Kann es sein, dass man mit `manage.py` inzwischen Superuser anlegen kann?

Das Buch kannst du aus der Sicht vergessen, das ist ziemlich out-of-date.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
klaus
User
Beiträge: 88
Registriert: Samstag 23. Juni 2007, 09:33
Wohnort: Kaufbeuren
Kontaktdaten:

OK, wenn das Buch veraltet ist, wo soll ich Django dann lernen?

Es kann natürlich sein, dass man mit manage.py superuser erstellen kann, aber ich weiß nicht wie.
http://klausweidinger.kl.funpic.de
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

klaus hat geschrieben:OK, wenn das Buch veraltet ist, wo soll ich Django dann lernen?
Über das Online-Tutorial auf der Django-Website und die ganze restliche Dokumentation dort.
klaus hat geschrieben:Es kann natürlich sein, dass man mit manage.py superuser erstellen kann, aber ich weiß nicht wie.
So wie das mit fast allen Unix-Tools geht: ``manage.py --help``.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Panke
User
Beiträge: 185
Registriert: Sonntag 18. März 2007, 19:26

Hast du auch django.contrib.auth installiert?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

,,,und auch die contenttypes middleware?
siehe: http://www.djangoproject.com/documentat ... tenttypes/

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
killercup
User
Beiträge: 16
Registriert: Mittwoch 19. Dezember 2007, 15:58

klaus hat geschrieben:OK, wenn das Buch veraltet ist, wo soll ich Django dann lernen?
Das Django-Buch ist vor einigen Tagen veröffentlicht worden und auch online wieder auf dem aktuellen Stand!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

killercup hat geschrieben:Das Django-Buch ist vor einigen Tagen veröffentlicht worden und auch online wieder auf dem aktuellen Stand!
Oh, Klasse!

Jetzt wird warscheinlich bald Version 1.0 rauskommen (müssen), weil sonst das Papierbuch nicht zu Version 1.0 passen wird. Danach hoffe ich mal auf einige größere Änderungen :)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Leonidas hat geschrieben:
killercup hat geschrieben:Das Django-Buch ist vor einigen Tagen veröffentlicht worden und auch online wieder auf dem aktuellen Stand!
Oh, Klasse!

Jetzt wird warscheinlich bald Version 1.0 rauskommen (müssen), weil sonst das Papierbuch nicht zu Version 1.0 passen wird. Danach hoffe ich mal auf einige größere Änderungen :)
Freu dich nicht zu früh, ich hoffe dass sie Version 1.0 nicht ohne newforms-admin und qs-refactor rausbringen, aber das wird sicher noch dauern...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

apollo13 hat geschrieben:Freu dich nicht zu früh, ich hoffe dass sie Version 1.0 nicht ohne newforms-admin und qs-refactor rausbringen, aber das wird sicher noch dauern...
Ich habe die Hoffnung an ``newforms-admin`` ziemlich verloren. Als ich das letzte mal da reingeschaut habe, hat sich da nicht viel getan. :(
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Leonidas hat geschrieben: Ich habe die Hoffnung an ``newforms-admin`` ziemlich verloren. Als ich das letzte mal da reingeschaut habe, hat sich da nicht viel getan. :(
Aber nicht doch :) Ich verwende ihn schon lang, und inzwischen funzen sogar schon die inlines wieder...
Benutzeravatar
klaus
User
Beiträge: 88
Registriert: Samstag 23. Juni 2007, 09:33
Wohnort: Kaufbeuren
Kontaktdaten:

Danke für die Antworten. Letzendlich habe ich die Lösung aber in der aktuellen Version des Djangobooks gefunden. Ich musste nur bei INSTALLED_APPS drei der Auskommentierten Apps entkommentieren.
Allerdings habe ich jetzt ein neues Problem: Wenn ich auf die admin-Startseite gehe kommt ein Fehlerseite.
AttributeError at /admin/
'WSGIRequest' object has no attribute 'user'

Außerdem ist mir gerade aufgefallen, dass jetzt nicht mal mehr der Server geht. Wenn ich im Verzeichnis meines Projekts python manage.py runserver eingebe, kommt der Fehler
ImportError: No module named admindjsite
(mein Projekt heißt djsite)

Hoffe, dass mir jemand helfen kann.
http://klausweidinger.kl.funpic.de
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Das kann eigentlich alles gar nicht so schwer sein, ich glaube, du vertippst dich nur irgendwo. Es folgt ein Beispiel. Öffne eine Shell, gehe in ein Verzeichnis, in dem dein neues Projekt landen soll. Prüfe, ob du "python" aufrufen kannst (das "sma$" ist der Prompt meiner Shell und soll nicht mit eingegeben werden!):

Code: Alles auswählen

sma$ python -V
Python 2.5.1
sma$ 
Prüfe, ob du "django-admin.py" aufrufen kannst:

Code: Alles auswählen

sma$ django-admin.py 
Type 'django-admin.py help' for usage.
sma$ 
Falls du "django-admin.py" nicht starten kannst, ist dieser Befehl entweder nicht in dem Suchpfad der Shell oder aber das Django-Rahmenwerk ist nicht richtig installiert und Python kann es nicht finden. Ich benutze übrigens die aktuelle SVN-Version von Django.

Lege jetzt ein Projekt "hello" an:

Code: Alles auswählen

sma$ django-admin.py startproject hello
sma$ 
Es wird ein neues Verzeichnis "hello" angelegt, in dem sich 4 Dateien befinden (das "ls -l" entspricht "dir" unter Windows):

Code: Alles auswählen

sma$ ls -l hello
total 24
-rw-r--r--  1 sma  sma     0 22 Dez 20:40 __init__.py
-rwxr-xr-x  1 sma  sma   546 22 Dez 20:40 manage.py
-rw-r--r--  1 sma  sma  2815 22 Dez 20:40 settings.py
-rw-r--r--  1 sma  sma   223 22 Dez 20:40 urls.py
sma$ 
Gehe in das Verzeichnis "hello" und lege eine neue Anwendung "app" an (unter Windows muss man das "./" weglassen):

Code: Alles auswählen

sma$ cd hello
hello sma$ ./manage.py startapp app
hello sma$ ls -l app
total 16
-rw-r--r--  1 sma  sma   0 22 Dez 20:44 __init__.py
-rw-r--r--  1 sma  sma  57 22 Dez 20:44 models.py
-rw-r--r--  1 sma  sma  26 22 Dez 20:44 views.py
hello sma$ 
Bearbeite "settings.py" und ändere (wir werden sqlite3 benutzen, da ich annehme, du hast Python 2.5.1, wo diese Datenbank mitgeliefert wird):

Code: Alles auswählen

DATABASE_ENGINE = 'sqlite3'    # GEÄNDERT
DATABASE_NAME = 'hello.db'     # GEÄNDERT

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.admin', # NEU HINZUGEFÜGT
    'hello.app', #NEU HINZUGEFÜGT
)
Bearbeite "urls.py" und ersetze alles durch den folgenden Code:

Code: Alles auswählen

from django.conf.urls.defaults import *

urlpatterns = patterns('',
    (r'^admin/', include('django.contrib.admin.urls')),
)
Bearbeite "app/models.py" und lege ein einfaches Modell an:

Code: Alles auswählen

from django.db import models

class Greeting(models.Model):
    text = models.CharField(max_length=100)

    class Admin:
        pass
Lasse Django die Datenbank anlegen:

Code: Alles auswählen

hello sma$ ./manage.py syncdb
Creating table auth_message
Creating table auth_group
Creating table auth_user
Creating table auth_permission
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table django_admin_log
Creating table app_greeting

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): 
Wie du siehst, fragt Django nach einem Superuser, der Admin-Rechte bekommt. Lege den User an, indem du die Fragen beantwortest:

Code: Alles auswählen

Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'sma'): 
E-mail address: sma@example.com
Password: 
Password (again): 
Superuser created successfully.
Installing index for auth.Message model
Installing index for auth.Permission model
Installing index for admin.LogEntry model
hello sma$ 
Starte jetzt den Django-Entwicklungsserver:

Code: Alles auswählen

hello sma$ ./manage.py runserver
Validating models...
0 errors found

Django version 0.97-pre-SVN-6976, using settings 'hello.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Gehe mit dem Browser auf http://localhost:8000/admin/ und melde dich als Superuser mit den eben eingegebenen Daten an. Du solltest eine Liste mit Modellen sehen, insbesondere unser definiertes "Greetings".

Lege ein neues "Greeting" mit dem Text "Hallo, Welt!" an.

Ändere jetzt "urls.py", und füge vor der Zeile mit "admin" folgende Zeile ein:

Code: Alles auswählen

    (r'^$', 'hello.app.views.hello'),
Bearbeite "app/views.py" und ersetze alles durch den folgenden Code:

Code: Alles auswählen

from django.http import HttpResponse
from hello.app.models import Greeting

def hello(request):
    g = Greeting.objects.order_by('?')[0]
    return HttpResponse(g.text)
Gehe mit dem Browser auf http://localhost:8000/ und du solltest "Hallo, Welt!" lesen können.

Wenn du magst, trage weitere Grüße ein. Jedes Mal, wenn du auf die URL zugreifst, wird ein zufälliger Gruß ausgegeben.

Stefan
Benutzeravatar
klaus
User
Beiträge: 88
Registriert: Samstag 23. Juni 2007, 09:33
Wohnort: Kaufbeuren
Kontaktdaten:

Danke, es hat geklappt. Allerdings weis ich nicht, woran es lag, dass es vorher nicht ging.
Ich habe eig. alles überprüft und keinen einzigen Unterschied zwischen deinem und meinem Projekt gefunde, bis auf das, dass mein Projekt schon mehr Seiten, einige Templates und statisch Inhalt, wie Bilder, enthielt. Auch die Models sind etwas anders, aber das ist ja klar. Ich habe auch die settings-Datei nochmal auf Rechtschreibfehler überprüft und nichts gefunden.
Ich weiß zwar jetzt, dass ich einen Fehler gemacht habe, sonst würde ich bei deinem Projekt auch nicht auf die Admin-Seite kommen, aber ich weiß nicht welchen.
Trotzdem danke für die Hilfe und falls irgendjemand mal herausbekommen sollte, wodurch der von mir oben gepostete Fehler entstehen kann, wäre es nett, wenn er es hier postet.

edit: ich glaube in dem Model muss es maxlength und nicht max_length heißen.
http://klausweidinger.kl.funpic.de
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

klaus hat geschrieben:AttributeError at /admin/
'WSGIRequest' object has no attribute 'user'
Hast du die "AuthenticationMiddleware" nicht an???

Das ist das Problem bei PyLucid und der installation: Wenn man noch kein syncdb gemacht hast, existieren die Tabellen für die Middlewares "SessionMiddleware" und "AuthenticationMiddleware" nicht. Also muß man die erstmal deaktivieren, dann ein syncdb machen und danach wieder aktivieren.

Ist zwar irgendwie doof, aber so funktioniert es ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten