扩展django usermodel

时间:2010-06-05 21:22:12

标签: django model django-users

我正在尝试为我的django应用创建一个注册表单。为此,我扩展了用户模型。这是我的 Forms.py

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')

这是我的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)

我不知道我在哪里弄错了。登录时不接受用户密码 并且不会针对创建的用户用户保存纬度和逻辑度。 我是django的新手,不知道该怎么办 任何机构都有任何解决方案。?

2 个答案:

答案 0 :(得分:2)

要从django的用户模型继承,你必须这样:

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

但是,如果您只想存储纬度/经度,那么扩展适合您的用户模型的另一种方法是创建一个适用于用户模型的用户配置文件。见这里:http://www.b-list.org/weblog/2006/jun/06/django-tips-extending-user-model/ 然后,您可以找到一个解决方案,您可以通过UserAdmin子类中的InlineAdmin管理相关的配置文件!
请参阅此内容以扩展管理员:http://pyxx.org/2008/08/18/how-to-extend-user-model-in-django-and-enable-new-fields-in-newforms-admin/
这用于在创建新用户时自动创建用户个人资料:Django: UserProfile with Unique Foreign Key in Django Admin

答案 1 :(得分:1)

Inheritance of "User" model good当您需要自定义方法来处理用户对象时。要存储其他信息,请best way is to use separate model class for this。 如果要在管理面板中内联新字段,则需要重新注册用户模型,如下所示:

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)