【问题标题】:Showing model in admin site in Django在 Django 的管理站点中显示模型
【发布时间】:2016-09-16 03:37:25
【问题描述】:

我有一个模型,我想在管理网站上展示它。

models.py:

class UserDetails(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='userdetails')
    address = models.CharField(max_length=50, default='Not set')

def __unicode__(self):
    return u' %s %s ' % (self.user, self.address)

admin.py:

from django.contrib import admin
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin
from index.models import User, UserDetails

class UserDetailsAdmin(admin.ModelAdmin):
    fields = ("address",)

admin.site.unregister(User)
admin.site.register(User, UserDetailsAdmin)

我得到一个错误:

FieldError:为用户指定的未知字段(地址)。检查 UserDetailsAdmin 类的字段/字段集/排除属性。

怎么了?

【问题讨论】:

  • 字段address 属于UserDetails 模型,而不是User。请参阅this answer 了解解决方法。

标签: python django


【解决方案1】:

在 admin.py

中

对get details of your model attribute这样做:

class UserDetailsAdmin(admin.ModelAdmin):
    list_display = ('address', 'user')

admin.site.register(UserDetails, UserDetailsAdmin)

list_display在admin的更改列表页面上控制fields是displayed

【讨论】:

  • 我现在收到一个错误:“超出最大递归深度”并指向 UserDetails 模型 def __unicode__(self) -function。我会把它添加到问题中。
  • 你使用的是哪个 python 版本:如果使用 Python 3,则使用 __str__()
  • 能否轻松将密码字段从默认用户模型获取到相同的 UserDetailsAdmin 类?
  • 是的,如果使用 django 抽象用户,您可以通过将密码字段放入 list_display() 来直接执行此操作
  • 好的,我想举个例子,但这可能已经是一个新问题了。
【解决方案2】:

在您的 admin.py

中

改变

admin.site.register(User, UserDetailsAdmin)
admin.site.unregister(User)

到

admin.site.register(UserDetails, UserDetailsAdmin)
admin.site.register(User)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 2012-09-28
    • 2011-01-11
    • 1970-01-01
    • 2015-06-11
    相关资源
    最近更新 更多