モデルを作成しました(models.py):
class opetest(models.Model):
name = models.CharField(max_length=200)
author = models.ForeignKey(User, related_name='author')
description = models.TextField(u'Test description', help_text = u'Some words about quiz')
pub_date = models.DateTimeField('date published', blank=False)
vacancies = models.ManyToManyField(Vacancy, blank=True)
students = models.ManyToManyField(User, blank=True, related_name='opetests') #This field I want to edit on "User change page"
estimate = models.IntegerField(default = 0, help_text = u'Estimate time in hours. \'0\' - unlimited')
次に、インラインブロックを追加して、「ユーザーの変更」ページ(admin.py)でopetest
を割り当てられるようにします。
class ProfileAdmin(UserAdmin):
filter_horizontal = ('opetests',)
admin.site.unregister(User)
admin.site.register(User, ProfileAdmin)
そして私はエラーを受け取りました:
'ProfileAdmin.filter_horizontal' refers to field 'opetests' that is missing from model 'User'.
グループの変更ページにグループのようなオペテストを表示したい。どうすればそれを達成できますか?
うーん、ここにはインラインを入れたくないと思います。
Django admin's filter_horizontal:
class ProfileAdmin(UserAdmin)
filter_horizontal = ('opetest',)
これにより、説明しているウィジェットが表示され、[ユーザー変更]ページでグループを追加/削除するために使用されます。
OK、あなたの編集に基づいて、答えを更新しました-基本的に、私たちが持っているのは、各ユーザーにリンクされたUserProfileです。
UserProfileには、opetestとのm2m関係が含まれています-これを管理者にfilter_horizontalで表示します。最終結果は次のようなものです:
models.py
from Django.db import models
from Django.contrib.auth.models import User
class opetest(models.Model):
name = models.CharField(max_length=200)
author = models.ForeignKey(User, related_name='author')
description = models.TextField(u'Test description', help_text = u'Some words about quiz')
pub_date = models.DateTimeField('date published', blank=False)
#vacancies = models.ManyToManyField(Vacancy, blank=True)
students = models.ManyToManyField(User, blank=True, related_name='opetests') #This field I want to edit on "User change page"
estimate = models.IntegerField(default = 0, help_text = u'Estimate time in hours. \'0\' - unlimited')
class UserProfile(models.Model):
user = models.OneToOneField(User, unique=True)
ope = models.ManyToManyField(opetest)
test_flag = models.BooleanField()
admin.py
from Django.contrib import admin
from Django.contrib.auth.admin import UserAdmin
from Django.contrib.auth.models import User
from secondapp.models import UserProfile, opetest
admin.site.unregister(User)
class opetestAdmin(admin.ModelAdmin):
pass
class UserProfileInline(admin.StackedInline):
model = UserProfile
filter_horizontal = ('ope',)
class CustomUserAdmin(UserAdmin):
#filter_horizontal = ('user_permissions', 'groups', 'ope')
save_on_top = True
list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff', 'last_login')
inlines = [UserProfileInline]
admin.site.register(User, CustomUserAdmin)
admin.site.register(opetest, opetestAdmin)
ご不明な点がある場合や、さらに何か必要な場合はお知らせください。