расширение пользовательской модели django - PullRequest
3 голосов
/ 06 июня 2010

Я пытаюсь создать форму регистрации для моего приложения 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 ]

2 голосов
/ 06 июня 2010

Чтобы наследовать от пользовательской модели 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-extension-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 с уникальным внешним ключом в Django Admin

1 голос
/ 06 июня 2010

Наследование модели "Пользователь" хорошо , когда вам нужны пользовательские методы для работы с объектами пользователя. Для хранения дополнительной информации лучше всего использовать отдельный класс модели для этого . Если вы хотите встроить свои новые поля в административную панель, вам необходимо перерегистрировать модель пользователя следующим образом:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...