peternovak
peternovak

Reputation: 135

Django admin reverse foregin key relationship

I have a number of different models connected to the User model through a foregin key relationship. I would now like to display all the attributes from the objects connected to the User model in the main admin overview.

models.py

class User(AbstractBaseUser):
    username = models.CharField(max_length=60)
    lastname = models.CharField(max_length=60, blank=True)

class UserProfile(models.Model):
    user_id = models.OneToOneField(
        User,
        on_delete=models.CASCADE,
        primary_key=True,
    )
    address = models.CharField(max_length=60, blank=True)

admin.py

class UserProfileAdmin(admin.ModelAdmin):
    list_display = ('user_firstname', 'user_lastname', 'address')

    def user_firstname(self, instance):
        return instance.user_id.username

    def user_lastname(self, instance):
        return instance.user_id.lastname

admin.site.register(UserProfile, UserProfileAdmin)

The code above works perfectly well to display attributes from "User" in "Userprofile", but how do I do this the other way around? In my code I currently have 4 different objects connected to the User object so keen to find a way to display all the data there.

Upvotes: 0

Views: 171

Answers (1)

Nikunj
Nikunj

Reputation: 315

use inlines

models.py

class Author(models.Model):
   name = models.CharField(max_length=100)

class Book(models.Model):
   author = models.ForeignKey(Author, on_delete=models.CASCADE)
   title = models.CharField(max_length=100)

admin.py

class BookInline(admin.TabularInline):
    model = Book

class AuthorAdmin(admin.ModelAdmin):
    inlines = [
        BookInline,
    ]

more info read https://docs.djangoproject.com/en/3.1/ref/contrib/admin/#inlinemodeladmin-objects

Upvotes: 1

Related Questions