2010-06-05 152 views
3

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

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

从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

+0

为什么使用用户配置的方式最好?这是我目前的做法,但我一直告诉自己,如果我通过继承来做,会更好。詹姆斯贝内特在扩展用户模型时写的博客非常老。从那以后,Django发生了重大变化。所以我想我的问题是:通过继承来做什么错了?有什么问题吗? (Django 1.2+) – rdegges 2010-06-06 01:38:33

+0

我不认为这是通过继承做错了!这取决于你想实现什么,添加用户配置文件是非常推荐的方式,我猜如果只是添加两个字段,它完全可以! – 2010-06-06 10:25:27

+0

感谢您的帮助......我这样做了,但又得到了另一个问题,只有一个密码字段显示在窗体上。和一个链接说“更改密码表单”,但甚至无法访问该链接它给了我一个页面未找到错误。和密码不保存在数据库中,当我从django管理员检查它的任何帮助谢谢 – MajorGeek 2010-06-06 11:03:58

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) 
+0

查看相关问题:http://stackoverflow.com/questions/44109/extending-the-user-model-with-custom-田合的Django – 2010-06-21 12:22:24