Django:如何仅向特定用户显示某些对象

时间:2019-05-07 07:28:44

标签: html django django-models django-templates django-views

我是django的新手,正在从事一个项目,其中管理员必须将团队分配给经理,并且一旦管理员将团队分配给经理,那么它将仅显示在该经理的仪表板上。我不知道该怎么办这个。请帮助,如果有人可以帮助我。

这是我的.html文件,管理员可以从中将团队分配给经理。

<th>S No.</th>
<th>COMPANY NAME</th>
<th>TEAM MEMBER</th>
  <th>Assign TEAM</th>
</tr>
</thead>
 <tbody>
 {%for team in object%}
   <tr>
     <form id="form_id" method="POST" action = "{% url 'accept' %}">
       {% csrf_token %}
      <th scope="row"> {{ forloop.counter }}</th>
       <td>{{team.company_name}}</td>
        <td>{{team.team_member}}</td>
          <td>
             <select name="manager_{{manager.id}}">
              {% for manager in managers %}
                <option value ="{{manager.id}}">{{manager.name}}</option>
              {% endfor %}                                   
               </select>
           </td>
             <td>
                 <input class="btn btn-raised btn-primary btn-round waves-effect" type="submit" value="Assign">
                            </td>
            </tr>
             {% endfor %}

这是我为团队和经理准备的模型:

class Create_Team(models.Model):
 first_name = models.CharField(max_length= 50)
 last_name = models.CharField(max_length= 50)
 company_name = models.CharField(max_length= 100)
 address = models.CharField(max_length= 1000)
 state = models.CharField(max_length= 100)
 city = models.CharField(max_length= 100)
 status = models.CharField(max_length= 30)
 managers = models.ForeignKey('manager', on_delete = models.SET_NULL, null=True)

class manager(models.Model):
 name = models.CharField(max_length= 500)
 designation = models.CharField(max_length= 500)

这是我给经理的views.py文件,管理员从中接收请求:

def accept(request):
obj= Create_Team.objects.filter(status='Accept') 
managers = manager.objects.all()
if request.method == 'POST':
   createteam = Create_Team()
   createteam_id = int(request.POST.get('team', 1))
   manager_id = int(request.POST.get('manager', 1))
   createteam = Create_Team.objects.get(pk=createteam_id)
   createteam.manager = manager.objects.get(pk=manager_id)
   createteam.save()

  return render(request, "admin/accept.html", {"object": obj,  "managers": managers})

def superior(request):
return render(request, 'manager/index-3.html')

这是我在查看用户是管理员还是用户还是管理员的视图

def login(request):
if request.method =='POST':
    # print(request.POST)
    username = request.POST['username']
    password = request.POST['password']

    user = auth.authenticate(username=username, password=password)

    if user is not None:
        auth.login(request, user)
        print (user.has_perm('app.edit_task'))
        # return redirect('index')

        if user.is_superuser:
            return redirect('master')

        # elif user.has_perm('app.edit_task'):
        #     return redirect('manager')
        elif user.is_staff:
            return redirect('manager')
        else:
            return redirect('index')

    else:
        messages.error(request, 'Invalid Credentials')
        return redirect('login')    
else: 
    return render(request, 'vadash/sign-in.html')

我希望每当管理员单击“分配”按钮时,该团队就会显示给该经理。请帮助我。但是这段代码并没有更新数据库。

2 个答案:

答案 0 :(得分:0)

管理员登录后,请确保您检索了已登录管理员的数据,并将该数据传递给视图

答案 1 :(得分:0)

设置自定义用户模型,以检查登录用户是管理员,管理员还是成员。

您可以通过不同的方法创建自定义用户。请检查链接:

https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html

您可以给布尔字段,例如is_manager,is_member等

定义自定义用户模型后,您可以使用

检查登录的用户是否为manager,admin等。
request.user.is_manager == True