1

User モデルを拡張したい。このドキュメントに記載されている手順に従いました。extended_usermodels.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

別のプロファイル クラスを使用しないと仮定します。その場合、Oscarはクラスを指すように設定します。 ProfileFormUserForm

そのクラスには、多かれ少なかれハードコードされた のリストがありfieldsます。(実際には、「このリストに存在するフィールドはどれでも」と表示されます。)

ここから先に進む最も簡単な方法は、新しく定義したモデルとユースケースにより適したフィールドのリストを使用する独自のクラスでオーバーライドすることです。 (モジュールを作成し、内部を定義します。)customer.forms.ProfileFormUseryour_app.customer.formsProfileForm

于 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 を拡張します。
    • ProfileFormOscarがプロファイルのレンダリングフォームに使用して新しいフォームを指すように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
于 2019-02-12T11:53:24.380 に答える