list_display 在 ModelAdmin Django 中未显示 email_verified 字段
list_display not showing email_verified field in ModelAdmin Django
我是在 Django ModelAdmin 中显示以下字段的列表。
list_display = ['username', 'email_verified', 'cert_password', 'key_name']
在此列表中,项目 - username, cert_password and key_name
属于型号 ModelName
,项目 email_verified
属于其他型号 ModelName2
。
但我想在 ModelAdmin
中将它们全部显示给管理员,因此我创建了一个函数 def email_verified
,如下所示:
class UserAdmin(admin.ModelAdmin):
list_display = ['username', 'email_verified', 'cert_password', 'key_name']
def email_verified(self):
return ModelName2.email_verified
actions = [my_action_here]
因此,当我返回 ModelName2.email_verified
时,它通过 ModelAdmin 在管理界面中显示 <django.db.models.query_utils.DeferredAttribute object at 0x7efcca3b9910>
。
所以,我尝试了以下方法:
class UserAdmin(admin.ModelAdmin):
list_display = ['username', 'email_verified', 'cert_password', 'key_name']
def email_verified(self,obj):
return ModalName2.objects.get().email_verified
actions = [my_action_here]
但在这种情况下我得到了错误 - get() returned more than one ModalName2
那么,我该怎么做呢。
我想在 table 的 ModalAdmin(管理界面)中显示 email_verified
的值以及相应的用户名和其他字段。
例如。我想要的-
Username | Email_Verified | cert_password | Key_name
abcuser | 1 | asdf | asdf
bhdjs | 1 | lkj | ljk
asdff | 0 | lkjsd | ljl
这是我的模态框 -
class ModelName2(models.Model):
username = models.OneToOneField(User, on_delete=models.CASCADE)
email_verified = models.BooleanField(
default=False,
help_text="Valid - <b><a>True</a></b> OR <b><a>False</a></b>")
def __unicode__(self):
return unicode(self.username)
class ModelName1(models.Model):
username = models.OneToOneField(User, on_delete=models.CASCADE)
cert_password = models.CharField(
max_length=20,
default='',
blank=True,
help_text="<b><a>System Generated - Do not alter</a></b>")
key_name = models.CharField(
max_length=15,
default='',
blank=True,
help_text="<b><a>System Generated - Do not alter</a></b>")
def __unicode__(self):
return unicode(self.username)
怎么做?我正在使用 Django 1.11.X
ModalName2.objects.get()
应该 return 只有一个对象。否则会引发错误。
至于您的问题,您实际上不需要 ModalName2.objects.get()
查询集。由于 obj
参数是 ModelName
实例,您可以执行以下操作:
def email_verified(self,obj):
return obj.username.modelname2.email_verified
请注意,您可以使用小写模型名称 modelname2
向后访问 OneToOneField
。
另外由于username
属性returning User
实例,最好将其重命名为user
:
class ModelName1(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
此外,我建议您加入 ModelName
和 ModelName1
作为一个模型,并使用单个 OneToOneField
而不是两个。
我是在 Django ModelAdmin 中显示以下字段的列表。
list_display = ['username', 'email_verified', 'cert_password', 'key_name']
在此列表中,项目 - username, cert_password and key_name
属于型号 ModelName
,项目 email_verified
属于其他型号 ModelName2
。
但我想在 ModelAdmin
中将它们全部显示给管理员,因此我创建了一个函数 def email_verified
,如下所示:
class UserAdmin(admin.ModelAdmin):
list_display = ['username', 'email_verified', 'cert_password', 'key_name']
def email_verified(self):
return ModelName2.email_verified
actions = [my_action_here]
因此,当我返回 ModelName2.email_verified
时,它通过 ModelAdmin 在管理界面中显示 <django.db.models.query_utils.DeferredAttribute object at 0x7efcca3b9910>
。
所以,我尝试了以下方法:
class UserAdmin(admin.ModelAdmin):
list_display = ['username', 'email_verified', 'cert_password', 'key_name']
def email_verified(self,obj):
return ModalName2.objects.get().email_verified
actions = [my_action_here]
但在这种情况下我得到了错误 - get() returned more than one ModalName2
那么,我该怎么做呢。
我想在 table 的 ModalAdmin(管理界面)中显示 email_verified
的值以及相应的用户名和其他字段。
例如。我想要的-
Username | Email_Verified | cert_password | Key_name
abcuser | 1 | asdf | asdf
bhdjs | 1 | lkj | ljk
asdff | 0 | lkjsd | ljl
这是我的模态框 -
class ModelName2(models.Model):
username = models.OneToOneField(User, on_delete=models.CASCADE)
email_verified = models.BooleanField(
default=False,
help_text="Valid - <b><a>True</a></b> OR <b><a>False</a></b>")
def __unicode__(self):
return unicode(self.username)
class ModelName1(models.Model):
username = models.OneToOneField(User, on_delete=models.CASCADE)
cert_password = models.CharField(
max_length=20,
default='',
blank=True,
help_text="<b><a>System Generated - Do not alter</a></b>")
key_name = models.CharField(
max_length=15,
default='',
blank=True,
help_text="<b><a>System Generated - Do not alter</a></b>")
def __unicode__(self):
return unicode(self.username)
怎么做?我正在使用 Django 1.11.X
ModalName2.objects.get()
应该 return 只有一个对象。否则会引发错误。
至于您的问题,您实际上不需要 ModalName2.objects.get()
查询集。由于 obj
参数是 ModelName
实例,您可以执行以下操作:
def email_verified(self,obj):
return obj.username.modelname2.email_verified
请注意,您可以使用小写模型名称 modelname2
向后访问 OneToOneField
。
另外由于username
属性returning User
实例,最好将其重命名为user
:
class ModelName1(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
此外,我建议您加入 ModelName
和 ModelName1
作为一个模型,并使用单个 OneToOneField
而不是两个。