问题描述
|
我已经用\“ Member \”模型扩展了django用户模型。我希望能够(在管理站点上)管理用户-来自两个模型的所有数据。我需要来自用户的电子邮件和姓名,但其他所有内容都来自“成员”。我已经对其进行了设置,以便可以在一种表单上获取所有数据,但是我不能继续将相关的(子级)信息添加到“成员”中,就像我通常不会将其作为内联模型显示时那样。用户。这是我的尝试。它当前可以显示用户+会员,但不能显示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)
解决方法
有一个很棒的教程,描述了如何做到这一点:
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
\“内置的User模型上有一个名为get_profile()的方法,该方法可以取消此设置;如果定义了AUTH_PROFILE_MODULE,则在任何User上调用get_profile()都会从您的自定义类中返回关联的对象。\”
, 我找到了一种解决方案,可以通过User.email,user.first_name或user.last_name搜索我的会员,并获取会员记录+子记录-如果需要,仍然可以轻松地返回到用户记录。我遇到的问题是我需要能够按用户字段查找我的会员。我没有修改用户管理站点(django \的auth_user),而是修改了成员管理站点(成员是django \ User的扩展名)。
管理员
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