2010-06-05 5 views
3

J'essaie de créer un formulaire d'inscription pour mon application django. Pour cela, j'ai étendu le modèle de l'utilisateur. Ceci est mon Forms.pyextension django usermodel

from contact.models import register 
from django import forms 
from django.contrib import auth 
class registerForm(forms.ModelForm): 

    class Meta: 
    model=register 
     fields = ('latitude', 'longitude', 'status') 
    class Meta: 
     model = auth.models.User # this gives me the User fields 
     fields = ('username', 'first_name', 'last_name', 'email') 

et voici mon model.py

from django.db import models 
from django.contrib.auth.models import User 
STATUS_CHOICES = (
('Online', 'Online.'), 
('Busy', 'Busy.'), 
('AppearOffline', 'AppearOffline.'),) 
class register(models.Model): 

    user = models.ForeignKey('auth.User', unique = True) 
    latitude = models.DecimalField(max_digits=8, decimal_places=6) 
    longitude = models.DecimalField(max_digits=8, decimal_places=6) 
status = models.CharField(max_length=8,choices=STATUS_CHOICES, blank= True, null=True) 

je ne sais pas où je fais une erreur. les mots de passe des utilisateurs ne sont pas acceptés lors de la connexion et la latitude et la logitude ne sont pas sauvegardées par rapport à l'utilisateur utilisateur créé. je suis fiarly nouveau à django et ne sais pas quoi faire tout corps ont une solution.?

Répondre

2

Pour hériter du modèle utilisateur de django, vous devez quelque chose comme ceci:

from django.contrib.auth.models import User 
class MyUserClass(User): 
    #your fields go here 

Mais une autre façon d'étendre le modèle de l'utilisateur, ce qui serait approprié pour vous, si vous voulez juste stocker la latitude/longitude est de créer un profil d'utilisateur qui est réalisé pour le modèle d'utilisateur. Voir ici: http://www.b-list.org/weblog/2006/jun/06/django-tips-extending-user-model/ Vous pouvez ensuite trouver une solution où vous pouvez administrer le profil associé via un InlineAdmin dans une sous-classe UserAdmin!
Voir cette extension pour l'admin: http://pyxx.org/2008/08/18/how-to-extend-user-model-in-django-and-enable-new-fields-in-newforms-admin/
Et ceci pour créer automatiquement un profil d'utilisateur lors de la création d'un nouvel utilisateur: Django: UserProfile with Unique Foreign Key in Django Admin

+0

Pourquoi utilise comme UserProfile le meilleur? C'est comme ça que je le fais actuellement, mais je me dis que ce serait mieux si je le faisais par héritage. Le blog que James Bennett a écrit sur l'extension du modèle utilisateur est vraiment vieux. Et Django a beaucoup changé depuis. Donc je suppose que ma question est: quel est le problème de le faire via l'héritage? Y a-t-il des problèmes? (Django 1.2+) – rdegges

+0

Je ne pense pas que ce soit mal de le faire via l'héritage! Cela dépend de ce que vous voulez réaliser et l'ajout d'un profil d'utilisateur est le moyen officiel recommandé et je suppose que si la chose consiste à ajouter deux champs, c'est OK! –

+0

merci pour l'aide ... je l'ai fait de cette façon, mais j'ai eu un autre problème que seul un champ de mot de passe est montré sur le formulaire. et un lien disant "changer le mot de passe", mais ne peux même pas accéder à ce lien, il me donne une page introuvable erreur. et le mot de passe n'est pas sauvegardé dans la base de données quand je le vérifie depuis l'administrateur django toute aide merci – MajorGeek

1

Inheritance of "User" model good lorsque vous avez besoin des méthodes personnalisées pour manipuler des objets utilisateur. Pour stocker des informations supplémentaires, best way is to use separate model class for this. Si vous voulez inline de nouveaux champs dans le panneau d'administration, vous devez à nouveau registre modèle utilisateur comme ceci:

from django.contrib import admin 
from django.contrib.auth.admin import UserAdmin 
from MyApp.models import MyUserProfile 

class MyUserProfileInline(admin.TabularInline): 
    model = MyUserProfile 
    fk_name = 'user' 
    max_num = 1 

class NewUserAdmin(UserAdmin): 
    inlines = [MyUserProfileInline, ] 

# Then reregister 
admin.site.unregister(User) 
admin.site.register(User, NewUserAdmin) 
+0

Voir la question connexe: http://stackoverflow.com/questions/44109/extending-the-user-model-with-custom- champs-en-django –

Questions connexes