2017-06-27 6 views
2

ユーザ(/auth/user/)セクションのDjango管理者にカスタムカラムを追加したいと思います。Djangoユーザのカスタムカラムのカラム

models.py

from django.db import models 
from django.contrib.auth.models import User 
from django.db.models.signals import post_save 
from django.dispatch import receiver 

class Profile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    birthday = models.DateField() 

    def __str__(self): 
     return self.user.username 

@receiver(post_save, sender=User) 
def create_user_profile(sender, instance, created, **kwargs): 
    if created: 
     Profile.objects.create(user=instance) 

@receiver(post_save, sender=User) 
def save_user_profile(sender, instance, **kwargs): 
    instance.profile.save() 

そしてadmin.pyに私はこのコードを持っている:私はlist_displayは、すべての作業を行う必要があることをここで読んだ

from django.contrib import admin 
from django.contrib.auth.admin import UserAdmin 
from django.contrib.auth.models import User 

class ProfileInline(admin.StackedInline): 
    model = Profile 
    can_delete = False 
    verbose_name_plural = 'Custom fields' 

class CustomUser(UserAdmin): 
    inlines = (ProfileInline,) 
    list_diplsay = ('birthday') 

    def get_inline_instances(self, request, obj=None): 
     if not obj: 
      return list() 
     return super(CustomUser, self).get_inline_instances(request, obj) 


admin.site.unregister(User) 
admin.site.register(User, CustomUser) 

を、しかし中私の場合それは動作しません。私はその行を追加して以来私の管理パネルに変更が表示されません。

問題はどこですか?ありがとう!

編集:list_diplsaylist_displayに変更すると固定されます。今私はこれを得る:type object 'User' has no attribute 'birthday'。何か案は?

答えて

4

あなたはタイプミスがあります:list_diplsaylist_displayである必要があります。また、リストの値に末尾のカンマを追加してください(('birthday',))。これにより、1つの値ではなくタプルになります。

編集:

birthdayフィールドはUserに属していないので、あなたはあなたの管理者クラスでそれを検索するメソッドを追加する必要があります:

class CustomUser(UserAdmin): 
    list_display = ('birthday',) 

    def birthday(self, obj): 
     return obj.profile.birthday 

(私が持っています管理クラスの関連部分のみが表示され、既存のinlinesなどが残ります)

+0

この目的のためにリストを使用する必要があります。当初はメモリを節約するように設計されていましたが、今は無関係です。 '= ['birthday']' –

+0

はい、おそらくそれもうまくいくでしょう。私たちは実際にOPが使用しているDjangoのバージョンを知っていません。 – Chris

+0

これで「タイプオブジェクト 'User'に属性 'birthday''がありません。何か案が?ありがとう! – Cosocit

関連する問題