【问题标题】:Add User related objects in User model in Django Admin在 Django Admin 的用户模型中添加用户相关对象
【发布时间】:2017-10-14 04:30:34
【问题描述】:

我正在开发一个 Django 1.10 项目,其中我有一个名为 TaggedArticle 的模型,它与相关名称为“标记”的用户相关,现在我想在打开用户时显示 TaggedArticle 对象表Django admin 中的对象。如何在 Django Admin 中实现该功能?

这是我的模型: 标记文章:

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)

更新: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)

更新:以下是截图:

  1. TaggedArticle 列表视图:

  1. TaggedArticle 的详细信息页面:

  1. 用户的详细信息页面:

在用户的详细信息页面上,应显示来自 TaggedArticle 对象的所有字段。
请帮帮我! 提前致谢!

【问题讨论】:

    标签: python django django-models django-admin


    【解决方案1】:
    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)
    

    现在您将在 Django admin 的用户详细信息页面中看到 TaggedArticle 表

    【讨论】:

    • 嗨,@NeErAj!另外,如何在用户详情页显示已标记文章的总数?
    • 以上代码将在 django admin 的用户详细信息页面中显示所有标记的文章。上面的代码你试过了吗?
    • 是的,它正在工作!但现在我还需要显示标记文章的总数!
    • 您不能在详细页面显示计数,但可以在用户列表页面显示。检查我更新的代码
    • 嗨@NeErAj!在用户的列表页面中是什么意思?它不会改变任何东西是用户详细信息页面!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-05
      • 2014-09-04
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      • 2015-01-24
      • 1970-01-01
      • 2020-11-14
      相关资源
      最近更新 更多