Reputation: 5684
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:
On user's detail page, all fields from TaggedArticle object should be displayed.
Help me, please!
Thanks in Advance!
Upvotes: 1
Views: 2234
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
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