Seite 1 von 1

Zusätzliche Information im Gjango User model unter bringen

Verfasst: Dienstag 15. Juli 2008, 16:57
von Laines
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/documentat ... bout-users
http://www.b-list.org/weblog/2006/jun/0 ... ser-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"

Verfasst: Dienstag 15. Juli 2008, 19:48
von apollo13
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

Verfasst: Dienstag 15. Juli 2008, 20:41
von audax
und dein nacktes "except" macht sich da sicher gut...

Verfasst: Mittwoch 16. Juli 2008, 20:12
von Laines
Könntet ihr mir bitte ein Code Beispiel geben wie ich ein User Profil anlege und es verbinde?

Verfasst: Mittwoch 16. Juli 2008, 20:50
von apollo13
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()

Verfasst: Donnerstag 17. Juli 2008, 17:30
von Laines
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"

Verfasst: Dienstag 29. Juli 2008, 10:58
von apollo13

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...

Verfasst: Dienstag 12. August 2008, 17:20
von Laines
Hi apollo,
ich bin hier die ganze Zeit am Rumprobieren... Könntest du mir den Kurzen Code abschnitt mal Posten.