我想扩展用户模型。我按照this doc中提到的步骤进行操作。我创建了一个新的应用extended_user
,其models.py读作:
from django.db import models
from oscar.apps.customer.abstract_models import AbstractUser
from django.utils.translation import ugettext_lazy as _
class User(AbstractUser):
nickname = models.CharField(_("nick_name"), max_length=50, null=True, blank=True)
def get_full_name(self):
full_name = '%s %s' % (self.last_name.upper(), self.first_name)
return full_name.strip()
在settings.py中,我提到了
AUTH_USER_MODEL = "extended_user.User"
我制作并运行迁移。在配置文件视图中,我可以看到nickname
字段,但在“配置文件编辑”视图中,我没有。如何在“配置文件编辑”表单中查看新添加的字段?
答案 0 :(得分:1)
我假设您不使用单独的rofile类。在这种情况下,Oscar sets ProfileForm
指向UserForm
类。
该类反过来有一个或多或少的硬编码fields
列表。 (实际上它说"whichever fields exist out of this list"。)
从这里开始的最简单方法是override customer.forms.ProfileForm
使用您自己的类,该类使用您新定义的User
模型以及更适合您的用例的字段列表。 (创建your_app.customer.forms
模块并在其中定义ProfileForm
。)
答案 1 :(得分:0)
python3 manage.py oscar_fork_app customer
from oscar import get_core_apps
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'django.contrib.flatpages',
'widget_tweaks',
'YOUR_APP',
] + get_core_apps(['customer'])
customer/forms.py
的以下内容:
ProfileForm
var,因为Oscar使用它来更改配置文件的呈现形式以指向您的新表单。from oscar.apps.customer.forms import UserForm as CoreUserForm
from user.models import User
from django import forms
from oscar.core.compat import existing_user_fields
class UserForm(CoreUserForm):
class Meta:
model = User
fields = existing_user_fields(['username', 'first_name', 'last_name', 'email'])
ProfileForm = UserForm