Django扩展用户模型,想要扩展模型的额外内联编辑
我已经用“成员”模型扩展了django用户模型。我希望能够(在管理员站点上)管理用户 - 来自两个模型的所有数据。我需要来自用户的电子邮件和姓名,但其他所有内容均来自“成员”。我已经设置好了,这样我就可以在一个表单上获得所有数据,但是我不能继续向“成员”添加相关的(子)信息,正如我通常会将它显示为内联模型的用户一样。这是我的尝试。它目前用于显示用户+会员,但不能显示SaleItems(会员)。Django扩展用户模型,想要扩展模型的额外内联编辑
from DjangoSite.ManageProducts.models import Member, SaleItem
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.admin import User
# cannot view this data from SaleItem model
class MemSalesInline(admin.TabularInline):
model = SaleItem
fk_name = 'Seller'
class MemberProfileInline(admin.StackedInline):
model = Member
fk_name = 'user'
# this does not work
inlines = [
MemSalesInline,
]
class MyUserAdmin(UserAdmin):
inlines = [MemberProfileInline,]
try:
admin.site.unregister(User)
except admin.sites.NotRegistered:
pass
admin.site.register(User, MyUserAdmin)
有一个伟大的教程,介绍如何做到这一点: http://www.b-list.org/weblog/2006/jun/06/django-tips-extending-user-model/
基本上你可以使用AUTH_PROFILE_MODULE来连接用户和会员模型。示例代码调用扩展用户模型UserProfile,您可能也希望考虑这样做。
下面是本教程的代码:
from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
url = models.URLField()
home_address = models.TextField()
phone_numer = models.PhoneNumberField()
user = models.ForeignKey(User, unique=True)
# In Settings.py
AUTH_PROFILE_MODULE = 'myapp.UserProfile'
您现在可以访问您的扩展用户模型如下:
from django.contrib.auth.models import User
u = User.objects.get(pk=1)
user_address = u.get_profile().home_address
“有一个方法内置的用户模型称为get_profile( ),它将此设置关闭;如果定义了AUTH_PROFILE_MODULE,则在任何用户上调用get_profile()将从您的自定义类中返回关联的对象。
我发现了一个解决方案,我可以通过User.email,user.first_name或user.last_name搜索我的成员,并获取成员记录+子记录 - 如果需要还可以轻松返回用户记录至。我遇到的问题是我需要能够通过用户字段找到我的会员。而不是修改用户管理站点(django的auth_user),我修改了我的成员管理站点(成员是我的django用户的扩展)。
admin.py
from DjangoSite.ManageProducts.models import Member, SaleItem
from django.contrib import admin
class MemSalesInline(admin.TabularInline):
model = SaleItem
fk_name = 'Seller'
class MemberAdmin(admin.ModelAdmin):
list_display = ['__str__', 'lname', 'fname'] # fname, lname not sortable
raw_id_fields = ("user",)
#this allows search "members" by User fields.
search_fields = ['user__email', 'user__last_name', 'user__first_name']
# include any child records here - child of "Member"
inlines = [MemSalesInline,]
admin.site.register(Member, MemberAdmin)
models.py
class Member(models.Model):
MemberID = models.AutoField(primary_key=True)
Country = models.ForeignKey(dmCountry, blank=True, null=True)
# plus more additional member info...
# these allow me to view email, last name and first name in the Member admin list page.
def __str__(self):
return "%s" % self.user.email
def lname(self):
return "%s" % self.user.last_name
def fname(self):
return "%s" % self.user.first_name
谢谢你,这就是我把它设置好的。我现在想管理django管理网站中的User + Member + Member子记录,但似乎有一些限制。 – user638303 2011-06-13 12:27:43