我使用“会员”模型扩展了django用户模型。我希望能够(在管理站点上)管理用户 - 来自两个模型的所有数据。我需要来自User的电子邮件和姓名,但其他一切都来自“会员”。我已经设置了它以便我可以在一个表单上获取所有数据,但是我无法继续将相关(子)信息添加到“成员”,因为我通常会将其显示为用户的内联模型。这是我尝试这样做的。它目前可以显示User + Member,但不能显示SaleItems(对于成员)。
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)
答案 0 :(得分:2)
有一个很棒的教程,介绍了如何执行此操作: http://www.b-list.org/weblog/2006/jun/06/django-tips-extending-user-model/
基本上,您可以使用AUTH_PROFILE_MODULE连接您的用户和会员模型。示例代码调用扩展的User模型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()将返回自定义类中的关联对象。”< / p>
答案 1 :(得分:1)
我找到了一个解决方案,我可以通过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