Django Oscar 的配置文件编辑表单中未显示新添加的字段?

Newly added fields not showing in Profile Edit form in Django Oscar?

我想扩展用户模型。我遵循了 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 字段,但在个人资料编辑视图中我看不到。我需要做什么才能在配置文件编辑表单中看到新添加的字段?

我假设您没有使用单独的角色文件 class。那样的话奥斯卡sets ProfileForm to point to the UserFormclass.

class 反过来有一个或多或少的硬编码列表 fields。 (实际上它说 "whichever fields exist out of this list"。)

从这里前进的最简单方法是使用您自己的 class override customer.forms.ProfileForm,它使用您新定义的 User 模型和字段列表更适合您的用例。 (创建一个your_app.customer.forms模块并在里面定义一个ProfileForm。)

  1. python3 manage.py oscar_fork_app customer
  2. 在您的设置中添加您的应用程序:
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'])
  1. 最后放上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