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/
Andこれは、新しいユーザーの作成時にユーザープロファイルを自動的に作成するためのものです。Django:DjangoAdminで一意の外部キーを持つUserProfile

于 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 に答える