Abdul Rehman
Abdul Rehman

Reputation: 5684

Add User related objects in User model in Django Admin

I'm working on a Django 1.10 project, in which I have a model called TaggedArticle which is related to a user with the related_name as "tagging", now I want to display a table of TaggedArticle objects when we open a user object in Django admin.How can I achieve that functionality in Django Admin?

Here are my models: TaggedArticle:

class TaggedArticle(models.Model):
    user = models.ForeignKey(User, related_name='tagging')
    email = models.EmailField(max_length=255)
    category_fit = models.CharField(choices=choices, max_length=255)
    article = models.ForeignKey(Article, related_name='articles')
    link = models.URLField(max_length=255,)
    relevant_feedback = models.TextField(blank=True)
    category = models.CharField(max_length=255,)
    created_at = models.DateTimeField(default=timezone.now, editable=False)

Update: admin.py

from django.contrib import admin
from .models import TaggedArticle as Tagged
from django.contrib.auth.admin import UserAdmin
from .models import TaggedArticle
from django.contrib.auth import get_user_model

User = get_user_model()
admin.site.unregister(User)

class InlineTaggedArticle(admin.TabularInline):
    model = TaggedArticle

class CustomAdmin(UserAdmin):
    date_hierarchy = 'date_joined'
    inlines = [InlineTaggedArticle, ]
    list_display = list(UserAdmin.list_display) + ['totol_tagged_article']

    def totol_tagged_article(self, obj):
        return obj.tagging.all().count()

admin.site.register(User, CustomAdmin)


class TaggedArticleAdmin(admin.ModelAdmin):
    date_hierarchy = 'created_at'
    fields = ['category_fit', 'article', 'link', 'relevant_feedback', 'category', 'user', 'email']
    list_display = ['article', 'link', 'user', 'email', 'relevant_feedback']
    list_filter = ['user', 'email']
    model = Tagged


admin.site.register(Tagged, TaggedArticleAdmin)

Update: Here are the screenshots:

  1. TaggedArticle List View:

enter image description here

  1. Detail Page for TaggedArticle:

enter image description here

  1. Detail page for User:

enter image description here

On user's detail page, all fields from TaggedArticle object should be displayed.
Help me, please! Thanks in Advance!

Upvotes: 1

Views: 2234

Answers (2)

Neeraj Kumar
Neeraj Kumar

Reputation: 3951

from django.contrib.auth.admin import UserAdmin
from .models import TaggedArticle
from django.contrib.auth import get_user_model
User =  get_user_model()
admin.site.unregister(User)

class InlineTaggedArticle(admin.TabularInline):
    model = TaggedArticle


class CustomAdmin(UserAdmin):
    inlines = [InlineTaggedArticle,]
    list_display = list(UserAdmin.list_display) + ['totol_tagged_article']

    def totol_tagged_article(self, obj):
        return obj.tagging.all().count()
admin.site.register(User, CustomAdmin)

Now you will see TaggedArticle table in User detail page in Django admin

Upvotes: 1

kerberos
kerberos

Reputation: 1655

You can write it like this in admin.py

from django.contrib import admin

# Register your models here.

from .models import TaggedArticle
class UserProfileAdmin(admin.ModelAdmin):
    list_display = ['']
admin.site.register(TaggedArticle,TaggedArticleAdmin)

Upvotes: 1

Related Questions