【问题标题】:list_display not showing email_verified field in ModelAdmin Djangolist_display 未在 ModelAdmin Django 中显示 email_verified 字段
【发布时间】:2018-12-03 22:28:54
【问题描述】:

我是在 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]

所以,当我通过 ModelAdmin 返回ModelName2.email_verified 时,它在管理界面中显示<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 那么,我该怎么做呢。

我想在表格中的 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

【问题讨论】:

  • ModelNameModelName2 是否相互关联?您能否发布模型以使您的探针更清晰?
  • ModalName2.objects.get() get() 的过滤器
  • 模型添加@neverwalkaloner
  • return ModalName2.objects.get(username=obj.username).email_verified

标签: python django django-models django-admin django-admin-actions


【解决方案1】:

ModalName2.objects.get() 应该只返回一个对象。否则会引发错误。 至于您的问题,您实际上不需要ModalName2.objects.get() queryset。由于 obj 参数是 ModelName 实例,您可以执行以下操作:

def email_verified(self,obj):
    return obj.username.modelname2.email_verified

请注意,您可以使用小写的模型名称 modelname2 向后访问 OneToOneField

另外由于username属性返回User实例,最好将其重命名为user

class ModelName1(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

另外我建议您将ModelNameModelName1 作为一个模型加入,并使用单个OneToOneField 而不是两个。

【讨论】:

    猜你喜欢
    • 2015-03-12
    • 2010-09-14
    • 1970-01-01
    • 2020-12-31
    • 2020-09-12
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多