У меня возникли трудности с созданием пользовательских полей пользователя с использованием рамки Cookiecutter Django. Я значительно изменил шаблон cookiecutter - удаление django-allauth
, но большая часть структуры остается прежней.Добавление полей в пользовательскую модель пользователя с Cookiecutter Django
Если бы я хотел добавить другое поле в модель пользователя (например, «department» - пользователи являются сотрудниками), где бы я его добавил?
Я понял, что могу добавить переменную department
в users/models.py
, но она не работает. Когда я вхожу на сайт admin
, я не вижу поля department
, когда добавляю пользователя. Аналогичным образом, я не вижу поля name
на админ-сайте - я вижу только имя, фамилию и адрес электронной почты.
# users/models.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, absolute_import
from django.contrib.auth.models import AbstractUser
from django.core.urlresolvers import reverse
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class User(AbstractUser):
# First Name and Last Name do not cover name patterns
# around the globe.
name = models.CharField(blank=True, max_length=255)
department = models.CharField(blank=True, max_length=5)
def __str__(self):
return self.username
def get_absolute_url(self):
return reverse('users:detail', kwargs={'username': self.username})
Файл администратора:
# users/admin.py
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from django import forms
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as AuthUserAdmin
from django.contrib.auth.forms import UserChangeForm, UserCreationForm
from .models import User
class MyUserChangeForm(UserChangeForm):
class Meta(UserChangeForm.Meta):
model = User
class MyUserCreationForm(UserCreationForm):
error_message = UserCreationForm.error_messages.update({
'duplicate_username': 'This username has already been taken.'
})
class Meta(UserCreationForm.Meta):
model = User
def clean_username(self):
username = self.cleaned_data["username"]
try:
User.objects.get(username=username)
except User.DoesNotExist:
return username
raise forms.ValidationError(self.error_messages['duplicate_username'])
@admin.register(User)
class UserAdmin(AuthUserAdmin):
form = MyUserChangeForm
add_form = MyUserCreationForm
@pydanny - Когда вы создаете новый тег, вы должны потратить время, чтобы написать хороший тег wiki и выдержку для него. Без этого рецензенты видят новый тег без руководства и один вопрос ... aka тег, который не дает никакого значения. – Mogsdad
@Mogsdad Спасибо за совет, я сделаю это сегодня. :) – pydanny
@Mogsdad Как это выглядит? – pydanny