【问题标题】:Django: How to display some objects to specific users onlyDjango:如何仅向特定用户显示某些对象
【发布时间】:2019-09-24 19:40:45
【问题描述】:

我是 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')

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

【问题讨论】:

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


    【解决方案1】:

    制作自定义用户模型以检查登录用户是经理、管理员还是会员。

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

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

    您可以提供布尔字段,例如 is_manager 、 is_member 等

    定义自定义用户模型后,您可以使用检查登录用户是否为经理、管理员等

    request.user.is_manager == True
    

    【讨论】:

    • 我希望当管理员将团队分配给经理时,该团队将仅显示在该经理的仪表板上,并且经理的名称应显示在后端
    • 不要将模型命名为 create team 。它是一个表名,保持为团队。如果经理可以分配多个团队,那么团队应该是经理模型中的多对多字段。如果是单个,则作为外键。您可以在管理员通过更新模型分配它时设置团队的值。要在经理仪表板中显示团队,您可以使用 manager.team 简单地调用它
    • 我现在添加了外键。但是我怎么能“当管理员通过更新模型分配团队时,您可以设置团队的值。要在经理仪表板中显示团队,您可以使用 manager.team 简单地调用它”这样做。
    • 使用 Manager.objects.get() 获得经理模型中的特定条目后,您可以设置外键,如 manager.team = 要分配的团队。确保您在团队字段中允许空值。并调用 manager.save() 。或者你也可以使用 .update() 方法
    • 如果经理是用户类型,您应该创建自定义用户模型或在经理模型中为用户添加外键
    【解决方案2】:

    经理登录后,确保您检索已登录经理的数据。并将该数据传递给视图

    【讨论】:

    • 经理登录后,我需要分配给该经理的团队只显示给他
    猜你喜欢
    • 2019-09-23
    • 1970-01-01
    • 2013-02-26
    • 2022-11-18
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    相关资源
    最近更新 更多