定制用户模型

用户表单定制示例

本示例对如何将一个文本字段与外键,添加到某个定制的用户模型,及将Wagtail的用户表单配置为允许对这些字段进行更新进行了演示。

创建出一个定制用户模型。在此情形下,这里对AbstractUser类进行了扩展,并添加了两个字段。这里的外键引用了另一个模型(并未给出)。

  1. class User(AbstractUser):
  2. country = models.CharField(verbose_name='国家', max_length=255)
  3. status = models.ForeignKey(MembershipStatus, on_delete=models.SET_NULL, null=True, default=1)

将包含了这个用户模型的应用,添加到 INSTALLED_APPS 并将 AUTH_USER_MODEL 设置为对该模型的应用。在本示例中,应用名为 users 同时模型为 User

  1. AUTH_USER_MODEL = 'users.USER'

在应用中创建出定制的用户 createedit 表单:

  1. from django import forms
  2. from django.utils.translation import ugettext_lazy as _
  3. from wagtail.users.forms import UserEditForm, UserCreationForm
  4. class CustomUserEditForm(UserEditForm):
  5. contry = forms.CharField(required=True, label=_("Country"))
  6. status = forms.ModelChoiceField(queryset=MembershipStatus.objects, required=True, label=_("Status"))
  7. class CustomUserCreationForm(UserCreationForm):
  8. country = forms.CharField(required=True, label=_("Country"))
  9. status = forms.ModelChoiceField(queryset=MembershipStatus.objects, required=True, label=_("Status"))

对Wagtail的用户 createedit 模板加以扩展。这些扩展的模板应放在模板目录wagtailusers/users下。

模板 create.html

{% raw %}

  1. {% extends "wagtailusers/users/create.html" %}
  2. {% block extra_fields %}
  3. {% include "wagtailadmin/shared/field_as_li.html" with field=form.country %}
  4. {% include "wagtailadmin/shared/field_as_li.html" with field=form.status %}
  5. {% endblock %}

{% endraw %}

模板 edit.html

{% raw %}

  1. {% extends "wagtailusers/users/edit.html" %}
  2. {% block extra_fields %}
  3. {% include "wagtailadmin/shared/field_as_li.html" with field=form.country %}
  4. {% include "wagtailadmin/shared/field_as_li.html" with field=form.status %}
  5. {% endblock %}

{% endraw %}

这里的 extra_fields 块允许将一些字段插入到默认模板中的 last_name 字段下面。有一些其他块的覆写选项,允许将一些字段追加到既有字段的末尾或开头,或是允许对所有字段进行重新定义。

将下面这些 Wagtail 设置项添加到项目,以对这些用户表单附加项进行引用:

  1. WAGTAIL_USER_EDIT_FORM = 'users.forms.CustomUserEditForm'
  2. WAGTAIL_USER_CREATION_FORM = 'users.forms.CustomUserCreationForm'
  3. WAGTAIL_USER_CUSTOM_FIELDS = ['country', 'status']