Django扩展用户模型,想要对扩展模型进行额外的内联编辑。

| 我已经用\“ 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
    

要回复问题请先登录注册