Zusätzliche Information im Gjango User model unter bringen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Laines
User
Beiträge: 39
Registriert: Donnerstag 15. Mai 2008, 18:42

Zusätzliche Information im Gjango User model unter bringen

Beitragvon Laines » Dienstag 15. Juli 2008, 16:57

Hi,
ich habe nach folgenden Anleitungen, welche eigentlich das selbe beschreiben, versucht einem User zusätzliche Felder zu geben, so das ich mehr Infos zum einzelnen User speichern kann.

http://www.djangoproject.com/documentation/authentication/#storing-additional-information-about-users
http://www.b-list.org/weblog/2006/jun/06/django-tips-extending-user-model/

Mein Code sieht jetzt so aus:
models.py

Code: Alles auswählen

from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
   matrikelnr = models.IntegerField()
   ip = models.CharField(max_length=15)
   mac = models.CharField(max_length=17)
   user = models.ForeignKey(User, unique=True)


views.py

Code: Alles auswählen

def registrieren(request):
    if request.method == 'POST':
        form = CreateUserForm(request.POST)
        if form.is_valid():
            ip = request.META.get('REMOTE_ADDR')
            formdata = form.cleaned_data
            username = formdata["username"]
            firstname = formdata["firstname"]
            lastname = formdata["lastname"]
            matrikelnr = formdata["matrikelnr"]
            password = formdata["password"]
            email = "platzhalter@platzhalter.de"
            try:
                user = User.objects.get(username = username)
                #eigentlich eine neue Seite
                return HttpResponse("Kann den Nutzer nicht anlegen, da er schon existiert")
            except:
                # Erstelle den user
                user = User.objects.create_user(username, email)
                # Setze die Standart Felder
                user.set_password(password)
                user.first_name = firstname
                user.last_name = lastname
                # Setze die Profil Felder
                p = user.get_profile() ### <--------
                p.ip = ip ### <--------
                # Lege den Nutzer an
                user.save()
                #und sende vielleicht noch eine Mail
               
            return http.HttpResponse("User angelegt") 


Als fehler bekomme ich "UserProfile matching query does not exist" "Exception Location: /usr/lib/python2.5/site-packages/django/db/models/query.py in get, line 197"
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Beitragvon apollo13 » Dienstag 15. Juli 2008, 19:48

Du musst das User Profile das erste mal selbst anlegen und mit dem User verbinden. Vlt. wirds ja mal gepatcht: http://code.djangoproject.com/ticket/7584

MfG apollo13
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Beitragvon audax » Dienstag 15. Juli 2008, 20:41

und dein nacktes "except" macht sich da sicher gut...
Laines
User
Beiträge: 39
Registriert: Donnerstag 15. Mai 2008, 18:42

Beitragvon Laines » Mittwoch 16. Juli 2008, 20:12

Könntet ihr mir bitte ein Code Beispiel geben wie ich ein User Profil anlege und es verbinde?
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Beitragvon apollo13 » Mittwoch 16. Juli 2008, 20:50

Laines hat geschrieben:Könntet ihr mir bitte ein Code Beispiel geben wie ich ein User Profil anlege und es verbinde?


/me ist heute zu gut drauf:

Code: Alles auswählen

x = YourUserProfile()
x.user = request.user
x.save()
Laines
User
Beiträge: 39
Registriert: Donnerstag 15. Mai 2008, 18:42

Beitragvon Laines » Donnerstag 17. Juli 2008, 17:30

Ich habs jetzt so geändert:

Code: Alles auswählen

def registrieren(request):
    if request.method == 'POST':
        form = CreateUserForm(request.POST)
        if form.is_valid():
            ip = request.META.get('REMOTE_ADDR')
            formdata = form.cleaned_data
            username = formdata["username"]
            firstname = formdata["firstname"]
            lastname = formdata["lastname"]
            matrikelnr = formdata["matrikelnr"]
            password = formdata["password"]
            email = "platzhalter@platzhalter.de"
            try:
                user = User.objects.get(username = username)
                #eigentlich eine neue Seite
                return HttpResponse("Kann den Nutzer nicht anlegen, da er schon existiert")
            except:
                # Erstelle den user und Verbinde das Profil
                user = User.objects.create_user(username, email)
                x = models.UserProfile()
              x.user = request.user
              x.ip = ip
              x.matrikelnr = matrikelnr
              x.save()
                # Setze die Standart Felder
                user.set_password(password)
                user.first_name = firstname
                user.last_name = lastname
                user.save()
               
            return http.HttpResponse("User angelegt") 
            #return HttpResponseRedirect('fileupload.html')
        else:
            return http.HttpResponse("Fehler bei der Eingabe")
    else:
        form = CreateUserForm()
        return render_to_response("registrierung.html", {'form': form})


Beim ersten mal wenn ich einen User anlege Funktioniert alles und er hat sein Profil mit den zusätzlichen Infos. Wenn sich allerdings ein zweiter Nutzer anlegen will, kommt "column user_id is not unique"
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Beitragvon apollo13 » Dienstag 29. Juli 2008, 10:58

Code: Alles auswählen

x.user = request.user

Kann natürlich nur einmal funktionieren, außer du meldest dich mit verschiedenen Usern an, du solltest ``user`` weiterverwenden (den aus user = User.objects.create_user(username, email)). Da du dort immer einen neuen erstellst -> somit unique id

Und du solltest den User auch speichern, bevor du sein Profil speicherst...
Laines
User
Beiträge: 39
Registriert: Donnerstag 15. Mai 2008, 18:42

Beitragvon Laines » Dienstag 12. August 2008, 17:20

Hi apollo,
ich bin hier die ganze Zeit am Rumprobieren... Könntest du mir den Kurzen Code abschnitt mal Posten.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder