我对 Django 比较陌生,我正在尝试实现文档中不太清楚的东西。我的应用程序需要多种类型的用户。因此,我扩展了 django User,创建了一个 Profile 模型,其中包含所有 User 类型中常见的附加字段:
USER_TYPES = (
('A', 'UserTypeA'),
('B', 'UserTypeB'),
('C', 'UserTypeC'),
)
class Profile(models.Model):
user = models.OneToOneField(User, unique=True)
about = models.TextField(blank=True)
user_type = models.CharField(max_length=3, choices=USER_TYPES, default='A')
def save(self, *args, **kwargs):
try:
existing = Profile.objects.get(user=self.user)
self.id = existing.id #force update instead of insert
except Profile.DoesNotExist:
print "Profile not created yet"
models.Model.save(self, *args, **kwargs)
def create_user(sender, instance, created, **kwargs):
print "User Profile Creation: False"
if created:
print "User Profile Creation: ", created
Profile.objects.create(user=instance)
post_save.connect(create_user, sender=Profile)
在 settings.py 我已经设置:
AUTH_PROFILE_MODULE = 'users.Profile'
之后,我定义了派生自 Profile 模型的 UserTypeX 模型,如下所示:
class UserTypeA(Profile):
phone_number = models.CharField(max_length=13,blank=False)
class UserTypeB(Profile):
company_name = models.CharField(max_length=30,blank=False)
phone_number = models.CharField(max_length=13,blank=False)
def __init__(self, *args, **kwargs):
kwargs['user_type'] = 'B'
super(UserTypeB, self).__init__(*args, **kwargs)
...
我已将这些用户模型注册到管理员,以便我可以独立管理我的用户。
默认管理员行为正确显示所有 Profile 和 UserTypeX 字段,并且由于 Profile 和 User 模型之间的 OneToOneField 关系,User 字段有一个选择框(旁边有一个加号按钮)。因此,每当我想创建一个新的 UserTypeX 时,我都必须按下加号按钮并在一个新的弹出窗口中填写所有默认 User django 定义的字段。
我现在正在努力做的是显示这些用户字段,而不是在新的弹出窗口中,而是在我的 UserTypeX 添加/编辑页面中内联。我已经阅读了有关 StackedInlines 和 TabularInlines 的文档,但这些文档不适合我的情况,因为我想在祖先的添加/编辑页面中内联父字段,反之亦然。
是否有针对该问题的示例代码(请!)的建议解决方案?提前致谢!
那么,简而言之,有没有办法在管理员的配置文件添加/编辑屏幕中显示用户字段(而不是由于 OneToOneField 关系而选择/添加功能)?
更新:一个相关的问题(虽然没有回答......)简要解决了这个问题是: