jdo*_*dot 7 python django django-models django-admin
我已经看到了很多相反的问题,其中包含以下内容:
class UserProfileInline(admin.StackedInline):
model = UserProfile
can_delete = False
verbose_name_plural = 'profile'
class NewUserAdmin(UserAdmin):
inlines = (UserProfileInline, )
admin.site.unregister(User)
admin.site.register(User, NewUserAdmin)
Run Code Online (Sandbox Code Playgroud)
我想做的是反过来,但我看不到让它发挥作用.这是我的代码不起作用.
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
from myapp.models import SpecialUserType
class UserInline(admin.StackedInline):
model = User
can_delete = False
class IncludeUserAdmin(admin.ModelAdmin):
inlines = (UserInline,)
admin.register(SpecialUserType, IncludeUserAdmin)
Run Code Online (Sandbox Code Playgroud)
我怎样才能使这项工作User成为管理员的内联SpecialUserType?
我得到的错误是:
<class 'django.contrib.auth.models.User'> has no ForeignKey to <class 'students.models.SpecialUserType'>
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为它显然OneToOneField是在SpecialUserType模型中,而不是在模型中User.但是我怎么能让它扭转OneToOneField呢?
(我知道这似乎是一件不寻常的事情,但我有充分的理由想要以这种方式设置管理员,而不是相反.)
不幸的是,这无法完成。我自己也曾多次遇到过这个问题。
正如错误消息所示,内联模型必须有一个指向主模型的ForeignKey(或OneToOneField)。
正如其他人提到的,我发现子类化 User 对我非常有帮助:
class UserProfile(User):
user = OneToOneField(User, parent_link=True)
# more fields, etc
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1058 次 |
| 最近记录: |