如何创建分级用户django

如何创建分级用户django,django,django-views,Django,Django Views,我有一个迷你博客和用户档案。在“用户配置文件”页面上,我显示以下信息: Comments count of this user; Posts count of this user; 我在模板userprofile中显示注释数,如下所示: {{user.comments.count}} def user(request, pk): user = User.objects.get(pk=pk) count_of_posts = user.posts.count() ti

我有一个迷你博客和用户档案。在“用户配置文件”页面上,我显示以下信息:

Comments count of this user; 
Posts count of this user;
我在模板userprofile中显示注释数,如下所示:

{{user.comments.count}}
def user(request, pk):
    user = User.objects.get(pk=pk)
    count_of_posts = user.posts.count()
    titles = {
        range(1, 10): 'Cat',
        range(10, 20): 'Dog',
        range(20, 30): 'Elephant'
        # add more titles
    }
    user_title = ''
    for key in titles:
        if count_of_posts in key:
            user_title = titles[key]
    return render(request, 'user.html', {'user': user,
                                         'user_title': user_title})
我想制作一个小型评级系统,例如:

如果用户留下了10条评论和10篇帖子,那么他就是一个猫(猫字)。
如果20是狗(狗字)。
30-大象等

为此,我希望在数据库中有一个单独的表,这样我就可以根据用户评级进行选择

我如何实现这一点?

看看这篇文章:

创建一个单独的
模型
并将用户
标题
作为一种关系分配给用户会导致许多数据库转换,在这里,您只需使用
计数
获取用户
帖子
的值,然后使用带有
范围
对象的自定义词典作为键来分配正确的
标题

更新

要实现此功能,请执行以下操作:

{{user.comments.count}}
def user(request, pk):
    user = User.objects.get(pk=pk)
    count_of_posts = user.posts.count()
    titles = {
        range(1, 10): 'Cat',
        range(10, 20): 'Dog',
        range(20, 30): 'Elephant'
        # add more titles
    }
    user_title = ''
    for key in titles:
        if count_of_posts in key:
            user_title = titles[key]
    return render(request, 'user.html', {'user': user,
                                         'user_title': user_title})
更新2

既然你想把标签添加到用户列表中,除了在
用户
模型中为它创建一个单独的字段,并在每次
用户创建或删除
帖子时用信息更新它之外,没有其他方法可以解决这个问题,下面是我对它的看法:

1.在用户模型中添加标题字段

型号.py

class User(models.Model): # your user model with your inheritance, disregard the 'models.Model' part, its just an example
    # your User model fields
    title = models.CharField('Title', max_length=50)
titles = { # add this dictionary seperately in your views file
    range(1, 10): 'Cat',
    range(10, 20): 'Dog',
    range(20, 30): 'Elephant'
    # add more titles
}

def index(request): # the view that handles post creation 
    if request.method == 'POST':
        form = PostForm(request.POST) # your post form class
        if form.is_valid():
            new_post = form.save(commit=False)
            new_post.user = request.user
            new_post.save()
            count_of_posts = request.user.posts.count()

            for key in titles: # assign a title to the user and save it
                if count_of_posts in key:
                    if request.user.title != titles[key]:
                        request.user.title = titles[key]
                        request.user.save()
    else:
        form = PostForm()
    return render(request, 'index.html', {'form': form})


 def delete_post(request):
     # create a similar check but call it when deleting a post


 def user_list(request): #template below
     users = User.objects.all()
     return render(request, 'user_list.html', {'users', users})


 def user(request, pk): # template below
     user = User.objects.get(pk=pk)
     return render(request, 'user.html', {'user': user})
     
二,。在您的视图中当您创建(或删除)一篇帖子时,检查当前用户的帖子计数,如果值更改,则分配新的标题,并保存它

视图.py

class User(models.Model): # your user model with your inheritance, disregard the 'models.Model' part, its just an example
    # your User model fields
    title = models.CharField('Title', max_length=50)
titles = { # add this dictionary seperately in your views file
    range(1, 10): 'Cat',
    range(10, 20): 'Dog',
    range(20, 30): 'Elephant'
    # add more titles
}

def index(request): # the view that handles post creation 
    if request.method == 'POST':
        form = PostForm(request.POST) # your post form class
        if form.is_valid():
            new_post = form.save(commit=False)
            new_post.user = request.user
            new_post.save()
            count_of_posts = request.user.posts.count()

            for key in titles: # assign a title to the user and save it
                if count_of_posts in key:
                    if request.user.title != titles[key]:
                        request.user.title = titles[key]
                        request.user.save()
    else:
        form = PostForm()
    return render(request, 'index.html', {'form': form})


 def delete_post(request):
     # create a similar check but call it when deleting a post


 def user_list(request): #template below
     users = User.objects.all()
     return render(request, 'user_list.html', {'users', users})


 def user(request, pk): # template below
     user = User.objects.get(pk=pk)
     return render(request, 'user.html', {'user': user})
     
三,。创建您的模板

用户列表.html

{% for user in users %}
    {{ user }} is a {{ user.title }}
{% endfor %}
{{ user }} is a {{ user.title }}
user.html

{% for user in users %}
    {{ user }} is a {{ user.title }}
{% endfor %}
{{ user }} is a {{ user.title }}

谢谢你的提示,如果你能帮助我使用语法检查更新的版本,我会非常感激的。这应该很有效。谢谢,你能告诉我如何在模板中显示这个吗?(标记)以及如何在单独的页面上通过评级显示用户列表?我已经更新了答案,请查看
update2
部分:)非常感谢您提供的详细答案!一旦我到了计算机,我一定会按照你的例子来实现它。