在Django Oscar中新增了不显示在配置文件编辑表单中的字段



我想扩展User模型。我按照这个文档中提到的步骤来做。我做了一个新的应用程序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字段,但在个人资料编辑视图中,我没有。我要做什么才能看到新添加的字段在配置文件编辑表单?

我假设您没有使用单独的概要文件类。在这种情况下,Oscar设置ProfileForm指向UserForm类。

这个类又有一个或多或少硬编码的fields列表。(实际上它说的是"列表中存在的任何字段")

从这里开始前进的最简单的方法是用您自己的类覆盖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'])
  • 最后一部分是customer/forms.py的这部分内容:
    • 它用你的模型来访问新添加的字段;
    • 扩展现有UserForm以保持所有干净的数据;
    • ProfileForm var更改为奥斯卡,使用它来渲染配置文件的形式,以指向您的新形式。
  • 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
    

    最新更新