2017-10-14 5 views
0

Je travaille sur un projet Django 1.10, dans lequel j'ai un modèle appelé TaggedArticle qui est lié à un utilisateur avec le related_name comme "tagging", maintenant je veux afficher une table d'objets TaggedArticle lorsque nous ouvrons un objet utilisateur dans Django admin. Comment puis-je obtenir cette fonctionnalité dans Django Admin?Ajouter des objets liés à l'utilisateur dans le modèle utilisateur dans Django Admin

Voici mes modèles: 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) 

Mise à jour: 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) 

Mise à jour: Son e sont les captures d'écran:

  1. TaggedArticle Liste Voir:

enter image description here

  1. page Détail pour TaggedArticle:

enter image description here

  1. page Détail pour l'utilisateur:

enter image description here

Sur la page de détail de l'utilisateur, tous les champs de l'objet TaggedArticle doit être affiché.
Aidez-moi, s'il vous plaît! Merci à l'avance!

Répondre

2
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) 

Maintenant, vous allez voir TaggedArticle table page détail de l'utilisateur dans Django admin

+0

Salut, @NeErAj! Aussi, comment puis-je afficher le nombre total d'articles marqués dans la page de détails de l'utilisateur? –

+0

Au-dessus du code montrera tout l'article étiqueté dans la page de détail d'utilisateur dans l'admin de django. avez-vous essayé le code ci-dessus? –

+0

yup, ça marche! mais maintenant j'ai besoin d'afficher le nombre total d'articles étiquetés aussi! –

1

Vous pouvez l'écrire comme ça dans 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)