2017-12-24 23 views
0

だから私は何か変わったものを見つけました。私は私の管理ページに表示させたいフィールドのどれもそこにないことに気づいただけです。失敗したモデルは、Userモデルの拡張であり、oneToOne関係を持つ "Profile"モデルです。コードは次のようになります。Django - list_display属性がモデルにOneToOneを含むモデルのフィールドを表示していない

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 

# Create your models here. 

#We need to extend the User Model 
class Profile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    bio = models.CharField(max_length=4096, null=True) 
    email_confirmed = models.BooleanField(default=False) 

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

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

    def get_bio(self): 
     return self.bio 

    def get_email_confirmed(self): 
     return self.email_confirmed 

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

admin.pyは

from django.contrib import admin 
from .models import Profile 

# Register your models here. 

class ProfileAdmin(admin.ModelAdmin): 
    list_display = ('email_confirmed', 'bio') 

admin.site.register(Profile) 

しかし、これらの変更で、管理者ページには次のようになります。

enter image description here

答えて

1

Iの避難所」私は今、私と一緒に働くDjango環境を持っていないので、完全に消えてしまいます。しかし、これを試してみてください。私は同様のコードを持っていた。それかもしれません。

class ProfileAdmin(admin.ModelAdmin): 
    list_display = ('email_confirmed', 'bio') 

admin.site.register(Profile,ProfileAdmin) 
+0

残念なことに、その解決策は、「MediaDefiningClsasオブジェクトは反復可能ではありません」というメッセージでプログラムをクラッシュしました。 – Alien13

+0

インラインなどを使用しましたか?私は私の個人的なgitから私のコードを反映するために私の答えを編集しています –

+0

私はインラインを使用していないので、今のところ現時点では。 – Alien13

1

あなたadmin.pyは次のようになります。

from django.contrib import admin 
from .models import Profile 

# Register your models here. 

class ProfileAdmin(admin.ModelAdmin): 
    list_display = ('email_confirmed', 'bio') 

admin.site.register(Profile, ProfileAdmin) 

最後の方法は、モデルと管理クラスの両方を登録する必要があります。

関連する問題