0

I have a model, which I want to get shown at Admin site.

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)

I get an error:

FieldError: Unknown field(s) (address) specified for User. Check fields/fieldsets/exclude attributes of class UserDetailsAdmin.

What's wrong?

MMakela
  • 167
  • 2
  • 16
  • The field `address` belongs to `UserDetails` model, not `User`. See [this answer](http://stackoverflow.com/a/5684745/2011147) for a workaround. – Selcuk May 19 '16 at 10:17

2 Answers2

4

in admin.py

Do like this to get details of your model attribute :

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

admin.site.register(UserDetails, UserDetailsAdmin)

list_display to control which fields are displayed on the change list page of the admin

Mushahid Khan
  • 2,816
  • 1
  • 19
  • 32
2

In your admin.py

change

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

to

admin.site.register(UserDetails, UserDetailsAdmin)
admin.site.register(User)
onkar
  • 4,427
  • 10
  • 52
  • 89