3

我正在尝试为我的 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 的新手,不知道该怎么做任何机构有任何解决方案。?

4

2 回答 2

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/ 然后您可以找到一个解决方案,您可以在其中通过 InlineAdmin 管理相关配置文件一个 UserAdmin 子类!
请参阅此扩展管理员: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

于 2010-06-05T22:42:09.817 回答
1

当您需要自定义方法来操作用户对象时,“用户”模型的继承很好。要存储附加信息,最好的方法是为此使用单独的模型类。如果要在管理面板中内联新字段,则需要重新注册用户模型,如下所示:

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)
于 2010-06-06T08:29:35.130 回答