如何访问由 admin.py 中的 OnetoOneField 引用的另一个模型扩展的 'User' 模型的属性
How to access attributes of the 'User' model extended by another model referenced by a OnetoOneField in admin.py
在 model.py 中,我有一个 class 扩展用户模型
class Tutor(models.Model):
user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
在 admin.py 中,我尝试使用 'user_id' 访问 user.id,这有效
class TutorAdmin(admin.ModelAdmin):
list_display = ('user_id', 'contact_number')
但是,当我尝试访问 'user' 的其他属性时,例如用户名、这种格式的电子邮件
class TutorAdmin(admin.ModelAdmin):
list_display = ('user_id', 'user_username', 'contact_number')
出现这种情况
访问 user.username 或 user.email 等属性的格式是什么?
更新
用
解决了
class TutorAdmin(admin.ModelAdmin):
@admin.display(description='username')
def username(self):
u = self.user
if u is not None:
return u.username
@admin.display(description='email')
def email(self):
u = self.user
if u is not None:
return u.email
list_display = ('user_id', username, email, 'contact_number')
感谢
的解决方案
您可以定义方法并在 list_display
:
中引用这些方法
class TutorAdmin(admin.ModelAdmin):
list_display = ('user_id', 'contact_number', <b>username</b>)
@admin.display(description='username')
def <b>username</b>(self, obj):
u = obj.user
if u is not None:
return u.username
但是您不能编辑用户名,因为该函数定义了如何访问数据,而不是如何更改数据。
由于 __str__
用于内置 User
模型 returns 用户名,您还可以使用:
class TutorAdmin(admin.ModelAdmin):
list_display = ('user_id', 'contact_number', <b>user</b>)
在 model.py 中,我有一个 class 扩展用户模型
class Tutor(models.Model):
user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
在 admin.py 中,我尝试使用 'user_id' 访问 user.id,这有效
class TutorAdmin(admin.ModelAdmin):
list_display = ('user_id', 'contact_number')
但是,当我尝试访问 'user' 的其他属性时,例如用户名、这种格式的电子邮件
class TutorAdmin(admin.ModelAdmin):
list_display = ('user_id', 'user_username', 'contact_number')
出现这种情况
访问 user.username 或 user.email 等属性的格式是什么?
更新
用
解决了class TutorAdmin(admin.ModelAdmin):
@admin.display(description='username')
def username(self):
u = self.user
if u is not None:
return u.username
@admin.display(description='email')
def email(self):
u = self.user
if u is not None:
return u.email
list_display = ('user_id', username, email, 'contact_number')
感谢
您可以定义方法并在 list_display
:
class TutorAdmin(admin.ModelAdmin):
list_display = ('user_id', 'contact_number', <b>username</b>)
@admin.display(description='username')
def <b>username</b>(self, obj):
u = obj.user
if u is not None:
return u.username
但是您不能编辑用户名,因为该函数定义了如何访问数据,而不是如何更改数据。
由于 __str__
用于内置 User
模型 returns 用户名,您还可以使用:
class TutorAdmin(admin.ModelAdmin):
list_display = ('user_id', 'contact_number', <b>user</b>)