2015-12-17 1 views
0

У меня возникли трудности с созданием пользовательских полей пользователя с использованием рамки 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 
+0

@pydanny - Когда вы создаете новый тег, вы должны потратить время, чтобы написать хороший тег wiki и выдержку для него. Без этого рецензенты видят новый тег без руководства и один вопрос ... aka тег, который не дает никакого значения. – Mogsdad

+1

@Mogsdad Спасибо за совет, я сделаю это сегодня. :) – pydanny

+0

@Mogsdad Как это выглядит? – pydanny

ответ

0

Вы отсутствуете атрибут fieldsets:

@admin.register(User) 
class UserAdmin(AuthUserAdmin): 
    form = MyUserChangeForm 
    add_form = MyUserCreationForm 
    fieldsets = (
     ('', {'fields': ('department',)}), 
    ) + AuthUserAdmin.fieldsets 
    list_display = ('username', 'department', 'is_superuser') 
    search_fields = ['username', 'department'] 

Вам не нужно устанавливать атрибуты list_display и search_fields для отображения department поля. Но я оставил их в образце, так как они очень удобны, когда дело доходит до настройки Django admin.

ModelAdmin. list_display:

Набор list_display для управления, какие поля отображаются на странице списка админа изменения .

ModelAdmin. search_fields:

Набор search_fields для того, чтобы окно поиска по списку изменений админ страницы. Это должно быть установлено в список имен полей, который будет выглядеть как , если кто-то отправляет поисковый запрос в это текстовое поле.

 Смежные вопросы

  • Нет связанных вопросов^_^