1

我想扩展用户模型。我按照本文档中提到的步骤进行操作。我制作了一个新应用程序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字段,但在配置文件编辑视图中我看不到。我必须做什么才能在配置文件编辑表单中看到新添加的字段?

4

2 回答 2

1

我假设您不使用单独的配置文件类。在这种情况下,奥斯卡 ProfileForm指向UserForm班级。

该类又具有或多或少的硬编码列表fields。(实际上它说“此列表中存在的任何字段”。)

从这里开始的最简单方法是使用您自己的类覆盖 customer.forms.ProfileForm,该类使用您新定义User的模型和更适合您的用例的字段列表。(创建一个your_app.customer.forms模块并定义一个ProfileForm内部。)

于 2015-08-28T12:24:06.560 回答
0
  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
    • 它会用您的模型更改模型以访问新添加的字段;
    • 扩展现有的 UserForm 以保持所有干净的数据;
    • 更改ProfileFormvar,因为 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
于 2019-02-12T11:53:24.380 回答