Django 扩展用户模型教程对我不起作用
Django extending user model tutorial isn't work for me
我已经使用了本教程并完全按照他们的方式进行操作:
https://docs.djangoproject.com/ja/1.9/topics/auth/customizing/#extending-the-existing-user-model
我的model.py:
from django.db import models
from django.contrib.auth.models import User
from datetime import datetime
class Chess(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
last_activity = models.DateTimeField(default=datetime(1970,1,1,))
is_avaliable = models.BooleanField(default=False,)
in_progress = models.BooleanField(default=False,)
我的admin.py:
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User
from chess_tournament.models import Chess
class ChessInline(admin.StackedInline):
model = Chess
can_delete = False
verbose_name_plural = 'Chess'
# Define a new User admin
class UserAdmin(BaseUserAdmin):
inlines = (ChessInline, )
# Re-register UserAdmin
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
在 managaer.py shell:
from django.contrib.auth.models import User
u = User.objects.get(pk=1)
u.username # return 'admin' it's work
u.chess.last_activity # return ERROR (described below)
AttrinbuteError: 'User' 对象没有属性 'chess'
- 但在 django 管理面板中,此字段可用且有效
请帮忙弄清楚,因为我已经花了 4 个小时了...
难不成你没有注册国际象棋模型?
尝试在 admin.py 的底部添加 admin.site.register(Chess, ChessAdmin)
。当然,您可能必须先创建一个简单的 ChessAdmin 以供显示。
您需要更新您的 Chess
模型并将 related_name
添加到 user
属性。
class Chess(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="chess_board")
# Other Stuff
现在您可以轻松访问 last_activity
或任何其他 属性:
u.chess_board.last_activity
希望对您有所帮助。
我已经使用了本教程并完全按照他们的方式进行操作: https://docs.djangoproject.com/ja/1.9/topics/auth/customizing/#extending-the-existing-user-model
我的model.py:
from django.db import models
from django.contrib.auth.models import User
from datetime import datetime
class Chess(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
last_activity = models.DateTimeField(default=datetime(1970,1,1,))
is_avaliable = models.BooleanField(default=False,)
in_progress = models.BooleanField(default=False,)
我的admin.py:
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User
from chess_tournament.models import Chess
class ChessInline(admin.StackedInline):
model = Chess
can_delete = False
verbose_name_plural = 'Chess'
# Define a new User admin
class UserAdmin(BaseUserAdmin):
inlines = (ChessInline, )
# Re-register UserAdmin
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
在 managaer.py shell:
from django.contrib.auth.models import User
u = User.objects.get(pk=1)
u.username # return 'admin' it's work
u.chess.last_activity # return ERROR (described below)
AttrinbuteError: 'User' 对象没有属性 'chess'
- 但在 django 管理面板中,此字段可用且有效
请帮忙弄清楚,因为我已经花了 4 个小时了...
难不成你没有注册国际象棋模型?
尝试在 admin.py 的底部添加 admin.site.register(Chess, ChessAdmin)
。当然,您可能必须先创建一个简单的 ChessAdmin 以供显示。
您需要更新您的 Chess
模型并将 related_name
添加到 user
属性。
class Chess(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="chess_board")
# Other Stuff
现在您可以轻松访问 last_activity
或任何其他 属性:
u.chess_board.last_activity
希望对您有所帮助。